【问题标题】:How do I redirect stdout to a file when using subprocess.call in python?在 python 中使用 subprocess.call 时如何将标准输出重定向到文件?
【发布时间】:2012-02-19 05:29:07
【问题描述】:

我正在从另一个 python 脚本 (A) 调用一个 python 脚本 (B)。

使用 subprocess.call,如何将 B 的标准输出重定向到指定的文件?

我正在使用 python 2.6.1。

【问题讨论】:

  • 为什么要使用subprocess.call() 来执行另一个 Python 脚本? import它并调用相应的函数不是更好吗?
  • 脚本 B 是一个包装脚本,它正在调用 A,我想向其发送我正在迭代的参数列表。

标签: python


【解决方案1】:

将文件作为stdout 参数传递给subprocess.call

with open('out-file.txt', 'w') as f:
    subprocess.call(['program'], stdout=f)

【讨论】:

  • ...这提醒了我,我也可以输入stderr=f
【解决方案2】:

替代方法

import subprocess
p=subprocess.Popen('lsblk -l|tee a.txt',stdout=subprocess.PIPE,shell=True)
(output,err)=p.communicate()
p_status=p.wait()
print output

以上代码会将命令输出写入文件 a.txt

【讨论】:

  • 如果出于某种奇怪的原因您需要子进程来控制文件,而不是 python(我的情况),这很有用
  • ...尽管没有shell=True 也可以而且应该这样做;你可以有两个单独的Popen 对象,一个用于lsblk,第二个用于tee,第一个的标准输出连接到第二个的标准输入;子流程模块文档展示了如何做到这一点。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-09-29
  • 2015-05-23
  • 1970-01-01
  • 1970-01-01
  • 2016-06-26
相关资源
最近更新 更多