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

18 投票
3 回答
24820 浏览
提问于 2025-04-16 05:48

在我的代码中,有一行类似这样的内容:

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()

撰写回答