将标准输出重定向到调用进程

1 投票
2 回答
645 浏览
提问于 2025-04-15 17:16

我不是bash方面的专家,所以请多多包涵。

我有一个Python脚本,它会启动其他进程,这些进程会在标准输出(stdout)上输出日志信息。
我应该使用什么bash命令来把这些子进程的标准输出重新导向回父进程的标准输出(也就是启动这些进程的Python脚本)呢?

提前谢谢你!

2 个回答

1

我猜你是在用 os.system("command") 来执行你的脚本。这个方法只会执行命令,并返回程序的结果值,而不会显示它的输出内容。你需要的是 subprocess 模块。比如说:

import subprocess

proc = subprocess.Popen(['command', 'option 1', 'option 2'], stdout=subprocess.PIPE)
output = proc.communicate()[0] #for stdout. Use proc.communicate[1] for stderr

看了你的评论,你的解决方案其实很简单:

subprocess.Popen('command option 1 option 2', shell=True)

注意:命令需要作为字符串传递,不能用其他形式。

3

如果你只是想在你的 Python 脚本中获取子进程的输出,最好的方法就是使用 subprocess 模块。

import subprocess

p = subprocess.Popen(['/bin/ls', '-l'], stdout=subprocess.PIPE)
(out, _) = p.communicate()
print "Output:", out

撰写回答