通过os模块和subprocess模块​​运行shell命令,一个有效,另一个无效

通过os模块和subprocess模块​​运行shell命令,一个有效,另一个无效

我正在学习如何通过 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)

相关内容