我正在学习如何通过 os 模块和子进程模块运行 shell 命令。以下是我的代码。
from subprocess import call
call('/usr/lib/mailman/bin/find_member -w user_email')
import os
os.system('/usr/lib/mailman/bin/find_member -w user_email')
第二个工作得很好,而另一方面,第一个则不起作用,并且出现以下错误。
Traceback (most recent call last):
File "fabfile.py", line 6, in <module>
call('/usr/lib/mailman/bin/find_member -w user_email')
File "/usr/lib64/python2.6/subprocess.py", line 478, in call
p = Popen(*popenargs, **kwargs)
File "/usr/lib64/python2.6/subprocess.py", line 639, in __init__
errread, errwrite)
File "/usr/lib64/python2.6/subprocess.py", line 1228, in _execute_child
raise child_exception
OSError: [Errno 2] No such file or directory
我认为这两种方法具有相同的效果。你能指出我这里可能有什么错误吗?非常感谢。
答案1
记录了两者之间的一个区别(这里)
os.system(命令)
在子 shell 中执行命令(字符串)。
尽管subprocess.call()
好像:
subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False)
运行 args 描述的命令。等待命令完成,然后返回 returncode 属性。
要使行为与您需要通过的subprocess.call()
相同。所以像这样:os.system()
shell=True
from subprocess import call
call('/usr/lib/mailman/bin/find_member -w user_email', shell=True)