我想知道subprocess.call()
是否已正确终止,而被调用的函数没有任何错误。例如,在下面的代码中,如果提供的路径不合适,ls
命令会给出错误:
错误:没有这样的文件或目录。
我希望将相同的输出存储为字符串。
import subprocess
path = raw_input("Enter the path")
subprocess.call(["ls","-l",path])
答案 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