1

来自 python 文档http://docs.python.org/2/library/subprocess.html

如果我在 python 中输入以下内容

>>> subprocess.call(["ls", "-l"])

我会得到一个0。

如果我在 python 中输入以下内容,

>>> subprocess.call("exit 1", shell=True)

我会得到一个 1。但是,如果我输入

>>> subprocess.call("exit 1")

它会告诉我一个错误

Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
  File "/usr/lib/python2.7/subprocess.py", line 493, in call
    return Popen(*popenargs, **kwargs).wait()
  File "/usr/lib/python2.7/subprocess.py", line 679, in __init__
    errread, errwrite)
  File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child
    raise child_exception
OSError: [Errno 2] No such file or directory

为什么会这样?

第二个问题,如果ls崩溃,我会通过使用以下命令获得非零返回值吗?

>>> subprocess.call(["ls", "-l"])
4

2 回答 2

0

exit是一个shell例程,而不是一个真正的程序。你得到一个错误,因为调用找不到名为exit. 如果您不将shell 参数设置True 为此,则执行它毫无意义。

要回答你的第二个问题,是的,你会得到一个非零的返回值。尝试列出您没有读取权限的目录。

于 2013-05-03T13:39:03.157 回答
0

这是因为如果shell=True命令将通过 shell 执行。您可以像在 shell 中一样传递命令行。如果省略该参数,则第一个参数将被威胁为文件名,即命令的文件名。并且没有命令'exit 1'

这是另一个使用ls -al命令的示例:

import subprocess

subprocess.call("ls -al", shell=True) # works
subprocess.call("ls -al") # fails

另请注意@ibi0tux 关于exit

于 2013-05-03T13:40:22.167 回答