如何将“subprocess.call”的输出捕获到文件中?

时间:2010-10-20 16:01:59

标签: python subprocess

在我的代码中,我有一行类似于:

rval = subprocess.call(["mkdir",directoryName], shell=True)

我可以查看rval以查看它是0还是1,但如果是1,我希望获得命令中的文字{ {1}}文件格式,如果我想确保文本相同,我可以将它与另一个文件进行比较。

是否有可能有这样的行,但我知道这不起作用

"A subdirectory or file ben already exists."

所以无论命令发生了什么,文本都会在rval = subprocess.call(["mkdir",directoryName], shell=True) >> filename 中捕获,filename仍然有返回码?

3 个答案:

答案 0 :(得分:18)

子进程模块具有内置的'check_output'功能,用于执行此操作:

In [11]: result = subprocess.check_output(['pwd'])

In [12]: print result
/home/vagrant

答案 1 :(得分:15)

import subprocess
f = open(r'c:\temp\temp.txt','w')
subprocess.call(['dir', r'c:\temp'], shell=True, stdout=f)
f.close()

答案 2 :(得分:10)

import subprocess

try:
    result = subprocess.check_output(['dir', r'c:\temp'], shell=True)
    print result
except subprocess.CalledProcessError as e:
    return_code = e.returncode

你无论如何都需要使用try catch,因为如果返回代码非零,它会抛出异常:)