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

Python 将标准输出重定向到调用进程,python,bash,Python,Bash,我不是狂欢节专家,所以请容忍我 我有一个python脚本,它正在启动其他进程,然后在stdout上发出日志消息。 我将使用哪个bash命令将这些子进程的stdout重定向回父进程的stdout(启动进程的python脚本) 提前感谢如果您只想在python脚本中捕获子进程的输出,最好的方法是使用模块: 如果您只想在python脚本中捕获子进程的输出,最好的方法是使用以下模块: 我假设您正在使用os.system(“命令”)来执行脚本。此方法仅执行命令并提供程序的返回值,而不是标准输出。你需要的是

我不是狂欢节专家,所以请容忍我

我有一个python脚本,它正在启动其他进程,然后在stdout上发出日志消息。
我将使用哪个bash命令将这些子进程的stdout重定向回父进程的stdout(启动进程的python脚本)


提前感谢

如果您只想在python脚本中捕获子进程的输出,最好的方法是使用模块:


如果您只想在python脚本中捕获子进程的输出,最好的方法是使用以下模块:


我假设您正在使用
os.system(“命令”)
来执行脚本。此方法仅执行命令并提供程序的返回值,而不是标准输出。你需要的是模块。例如:

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)

注意:命令需要作为字符串传递。序列不起作用。

我假设您使用的是
os.system(“命令”)
来执行脚本。此方法仅执行命令并提供程序的返回值,而不是标准输出。你需要的是模块。例如:

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)

注意:命令需要作为字符串传递。序列不起作用。

我现在正在这样做,但这只会在命令完成后给出输出。但是,如果这是一个长时间运行的进程(某种服务器或其他东西),我必须等到退出才能到达标准输出…您可以尝试使用
p.stdout.read()
和类似的函数以增量方式读取传入的数据。但是,如果进程也在stderr:cool上生成输出,那么请注意潜在的问题。这听起来正是我需要的。我将把它放在一个循环中,然后阅读/打印其中的内容。。。谢谢@deepblue,您可能会遇到不需要的缓冲(例如,仅在4K左右的突发中发出输出)--在这种情况下,请打开另一个问题,完整描述您想要的内容(在非Windows上的响应将是
pexpect
,在Windows上的响应将是
wexpect
,与此基本相同的许多现有问题一样;-)@Alex-基本上你是对的。我至少花了一个小时试图让stdout file对象通过stdout.read()在while循环中给我几行文本)…不走运。我正在查看pexpect,非常感谢您提供的提示!我现在正在这样做,但这只会在命令完成后提供输出。但是,如果这是一个长时间运行的过程(某种服务器或其他东西),我必须等到退出后才能访问stdout…您可以尝试使用
p.stdout.read()
和类似的函数以增量方式读取传入数据。但是,如果进程也在stderr上生成输出,请注意潜在的问题:酷。这听起来正是我需要的。我将把它放在一个循环中,并读取/打印其中的内容…谢谢!@deepblue,您可能会遇到不需要的缓冲(例如,仅以4K左右的频率发出输出)--在这种情况下,打开另一个问题,完整描述您想要的内容(在非窗口上的回答将是
pexpect
,在窗口上的回答将是
wexpect
,与许多现有问题基本相同;-)@Alex-基本上你是对的。我已经花了至少一个小时试图让stdout file对象通过stdout.read()在while循环中给我几行文本……不走运。我正在复习pexpect,非常感谢你提供的提示!这就是我现在正在做的。看看上面我正在做的问题。看看上面我正在做的问题