如何将“subprocess.call”的输出捕获到文件中?
在我的代码中,有一行类似这样的内容:
rval = subprocess.call(["mkdir",directoryName], shell=True)
我可以检查 rval
的值,看它是 0
还是 1
。但是如果它是 1
,我希望能把命令 "A subdirectory or file ben already exists."
的文本保存到一个文件里,这样我就可以和另一个文件进行比较,确保文本是一样的。
我想知道是否可以写出这样的一行代码,但我知道这样写是行不通的:
rval = subprocess.call(["mkdir",directoryName], shell=True) >> filename
这样无论命令执行结果如何,文本都能被保存到 filename
中,而 rval
依然能得到返回的状态码?
3 个回答
12
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,因为如果返回的代码不是零,就会抛出异常哦 :)
17
subprocess模块里面有一个内置的'check_output'函数,可以用来完成这个任务:
In [11]: result = subprocess.check_output(['pwd'])
In [12]: print result
/home/vagrant
15
在编程中,有时候我们会遇到一些问题,特别是在使用某些工具或库的时候。这些问题可能会让我们感到困惑,不知道该怎么解决。比如,有人可能在使用某个功能时,发现它并没有按照预期工作,这时候就需要去查找原因。
通常,我们可以通过查看文档、搜索相关问题或者向其他开发者请教来找到解决方案。很多时候,社区里的人会分享他们的经验和解决办法,这对我们来说是非常有帮助的。
另外,调试也是一个很重要的步骤。通过逐步检查代码,看看每一部分是如何工作的,我们可以更容易地找到问题所在。
总之,遇到问题时不要慌张,利用好身边的资源,慢慢摸索,就能找到解决的办法。
import subprocess
f = open(r'c:\temp\temp.txt','w')
subprocess.call(['dir', r'c:\temp'], shell=True, stdout=f)
f.close()