重定向子进程标准输出
Posted
技术标签:
【中文标题】重定向子进程标准输出【英文标题】:Redirecting subprocess stdout 【发布时间】:2013-06-02 16:56:26 【问题描述】:我已经使用 test.py 中的类 Redir 设置了一个标准输出重定向(如下)。
输出应在文本框中显示两个打印语句。但目前只有“Output1”发送到文本框,“Output2”打印在后面的控制台中。
我想知道是否有办法重定向子进程的标准输出?我尝试使用 subprocess.PIPE 和 Redir 类本身,但无法正确使用。
注意:最终,Popen 调用不会调用 python 文件,所以我不能只从 Test2 获取字符串。不幸的是,我也仅限于 Python 2.6。
谢谢!
test.py:
import sys
from Tkinter import *
import subprocess
class Redir(object):
def __init__(self, textbox):
self.textbox = textbox
self.fileno = sys.stdout.fileno
def write(self, message):
self.textbox.insert(END, str(message))
class RedirectGUI(object):
def __init__(self):
# Create window - Ignore this bit.
# ================================
self.root = Tk()
self.btn = Button(self.root, text="Print!", command=self.print_stuff, state=NORMAL)
self.btn.pack()
self.textbox = Text(self.root)
self.textbox.pack()
# Setup redirect
# ==============
self.re = Redir(self.textbox)
sys.stdout = self.re
# Main window display
# ===================
self.root.mainloop()
def print_stuff(self):
subprocess.Popen(["python", "test2.py"], stdout=self.re)
print "Output1"
if __name__ == "__main__":
RedirectGUI()
test2.py:
class Test2(object):
def __init__(self):
print "Output2"
if __name__ == "__main__":
Test2()
【问题讨论】:
这里是an example on how to show subprocess output in "real time" in tkinter GUI 【参考方案1】:你可以试试这个,看看你是否得到“Output2”
task = subprocess.Popen(["python", "test2.py"], stdout=subprocess.PIPE)
print task.communicate()
如果你这样做,请将其发送到文本框:)
【讨论】:
以上是关于重定向子进程标准输出的主要内容,如果未能解决你的问题,请参考以下文章