如何检查子进程是否正确终止?

时间:2014-12-13 10:38:39

标签: python subprocess

我想知道subprocess.call()是否已正确终止,而被调用的函数没有任何错误。例如,在下面的代码中,如果提供的路径不合适,ls命令会给出错误:

  

错误:没有这样的文件或目录。

我希望将相同的输出存储为字符串。

import subprocess
path = raw_input("Enter the path")
subprocess.call(["ls","-l",path])

2 个答案:

答案 0 :(得分:1)

你不能用call做到这一点,因为它的作用只是:

  

运行args描述的命令。等待命令完成,然后返回returncode属性。

因此,您只能确定程序的返回代码,如果没有错误发生,通常表示为0,否则为非零。

使用同一模块中的check_output方法:

try:
    result = subprocess.check_output(["ls", "-l", path],
                                     stderr = subprocess.STDOUT)
    print result
except subprocess.CalledProcessError, e:
    print "Error:", e.output

这是working demo

答案 1 :(得分:1)

from subprocess import Popen, PIPE
p = Popen(["ls", "-l", path], stdin=PIPE, stdout=PIPE, stderr=PIPE)
output, err = p.communicate()
status = p.returncode
if  status:
  # something went wrong
  pass
else:
  # we are ok
  pass

虽然考虑使用os.listdir