首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >subprocess.call()与图形用户界面交互(Tkinter)

subprocess.call()与图形用户界面交互(Tkinter)
EN

Stack Overflow用户
提问于 2012-06-05 08:18:49
回答 1查看 8.7K关注 0票数 3

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

我真的不确定如何处理这样的事情,因为我是第一次使用subprocess模块。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-06-05 23:59:15

我想我已经掌握了使用Entry作为标准输入进行子处理的基础知识。您可能必须根据自己的需要对其进行调整(re:输出到Text小部件)。

此示例调用一个测试脚本:

代码语言:javascript
运行
复制
# test.py:

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

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

通过GUI调用此函数并与之交互的方法如下:

代码语言:javascript
运行
复制
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

希望这能有所帮助。

另请查看this,了解有关子进程标准输出问题的想法。您需要编写一个新的stdout,以便将stdout重定向到textwidget,如下所示:

代码语言:javascript
运行
复制
class MyStdout(object):
    def __init__(self,textwidget):
        self.textwidget = textwidget
    def write(self,txt):
        self.textwidget.insert(END,txt)

sys.stdout = MyStdout(mytextwidget)

但我推荐阅读人们已经做到了这一点的其他例子。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10890076

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档