首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在python中使用os.system但不在shell中使用时出错

在python中使用os.system但不在shell中使用时出错
EN

Stack Overflow用户
提问于 2016-06-13 16:34:30
回答 2查看 1.8K关注 0票数 1

我正在尝试重定向出gnu make。我希望将所有内容都重定向到STDOUT和all.log,并仅将错误重定向到error.log。

下面是我的程序

代码语言:javascript
复制
#!/usr/bin/env python
import optparse
import os
import sys
import commands

command = 'make all > >(tee -a  all.log ) 2>&1 2> >(tee -a  error.log )'
SysReturnVal=os.system(command)

print "system return value is ", SysReturnVal

当我执行它时,

代码语言:javascript
复制
sh: -c: line 0: syntax error near unexpected token `>'
sh: -c: line 0: `make all > >(tee -a all.log  ) 2>&1 2> >(tee -a  error.log )'

但是在linux bash shell上执行相同的命令没有错误。

代码语言:javascript
复制
make all > >(tee -a  all.log ) 2>&1 2> >(tee -a  error.log )

为什么在使用os.system的python脚本中运行时会失败,而在终端/bash shell中不会呢?

EN

回答 2

Stack Overflow用户

发布于 2016-06-13 16:53:20

os.system启动/bin/sh,您的命令中包含bashism:

代码语言:javascript
复制
>(....)

您需要启动bash:

代码语言:javascript
复制
os.system("bash -c '{}'".format(command))

还请记住,如果在命令中使用单引号,则需要对其进行转义以打印:'\'',例如:

代码语言:javascript
复制
command="ls '\\''.'\\''"
# And it's even worse in single quotes:
command='ls \'\\\'\'.\'\\\'\''
票数 2
EN

Stack Overflow用户

发布于 2016-06-13 16:44:32

os.system()调用*nix system()调用。

系统()库函数使用fork(2)创建子进程,该子进程使用execl(3)执行命令中指定的shell命令,如下所示: execl("/bin/sh","sh","-c",command,(char *) 0);

更多信息:doc

你必须做一些像os.system("/bin/bash <command>")这样的事情

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37785106

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档