繁体   English   中英

subprocess.call()与GUI交互(Tkinter)

[英]subprocess.call() interacting with GUI (Tkinter)

有没有办法使用subprocess.call()subprocess.Popen()并通过Tkinter的Entry小部件与stdin交互,并将stdout输出到Text小部件?

我不确定如何处理这样的事情,因为我是使用subprocess模块的新手。

我认为我已经掌握了使用Entry作为stdin进行子处理的基础知识。 您可能需要根据自己的需要进行抖动(re:输出到Text小部件)。

此示例调用测试脚本:

# test.py:

#!/usr/bin/env python
a = raw_input('Type something!: \n') #the '\n' flushes the prompt
print a

只需要一些输入(来自sys.stdin )并打印它。

调用它并通过GUI与它交互完成:

from Tkinter import *
import subprocess

root = Tk() 

e = Entry(root)
e.grid()

b = Button(root,text='QUIT',command=root.quit)
b.grid()

def entryreturn(event):
    proc.stdin.write(e.get()+'\n') # the '\n' is important to flush stdin
    e.delete(0,END)

# when you press Return in Entry, use this as stdin 
# and remove it
e.bind("<Return>", entryreturn)

proc = subprocess.Popen('./test.py',stdin=subprocess.PIPE)

root.mainloop()

现在无论是输入到Entry e (其次是Return键),然后通过标准输入传递给proc

希望这可以帮助。


还要检查这个有关子进程问题的stdout的想法。 你需要编写一个新的stdout来将stdout重定向到textwidget,例如:

class MyStdout(object):
    def __init__(self,textwidget):
        self.textwidget = textwidget
    def write(self,txt):
        self.textwidget.insert(END,txt)

sys.stdout = MyStdout(mytextwidget)

但我建议阅读人们已经实现这一目标的其他例子。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM