python - 将命令提示符输出重定向到 python 生成的窗口

标签 python python-2.7 wxpython

开发了一个使用 msbuild 构建项目的脚本。我有使用 wxpython 开发的 GUI,它有一个按钮,当用户单击该按钮时,将使用 msbuild 构建一个项目。现在,我想在用户单击该按钮时打开一个状态窗口,并显示命令提示符中显示的所有输出,并且不应显示命令提示符,即将命令提示符输出重定向到用户 GUI 状态窗口。我的构建脚本是,

def build(self,projpath)
    arg1 = '/t:Rebuild'
    arg2 = '/p:Configuration=Release'
    arg3 = '/p:Platform=x86'
    p = subprocess.call([self.msbuild,projpath,arg1,arg2,arg3])
    if p==1:
        return False
    return True

最佳答案

实际上几年前我在我的博客上写过这个,我创建了一个脚本来将 ping 和 traceroute 重定向到我的 wxPython 应用程序:http://www.blog.pythonlibrary.org/2010/06/05/python-running-ping-traceroute-and-more/

基本上,您创建一个简单的类来将 stdout 重定向到并将其传递给 TextCtrl 的实例。它最终看起来像这样:

class RedirectText:
    def __init__(self,aWxTextCtrl):
        self.out=aWxTextCtrl

    def write(self,string):
        self.out.WriteText(string)

然后当我写我的 ping 命令时,我这样做了:

def pingIP(self, ip):
    proc = subprocess.Popen("ping %s" % ip, shell=True, 
                            stdout=subprocess.PIPE) 
    print
    while True:
        line = proc.stdout.readline()                        
        wx.Yield()
        if line.strip() == "":
            pass
        else:
            print line.strip()
        if not line: break
    proc.wait()

要查看的主要内容是子进程调用中的 stdout 参数,wx.Yield() 也很重要。 Yield 允许将文本“打印”(即重定向)到标准输出。没有它,在命令完成之前文本不会显示。我希望一切都有意义。

关于python - 将命令提示符输出重定向到 python 生成的窗口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15471007/

相关文章:

mysql - python使用sshtunnel无法连接mysql

python - 在 pydev 中使用 wxPython 时导入 undefined variable

python - 从 Python 中的多维数组中删除行

python - ram 中的 django 变量

python - 如何从 jsonline 文件中的每一行提取元素?

python - 有没有一种有效的方法可以将 numpy.ndarray 转换为列表?

Python:通过嵌入复杂的算法改进子字符串搜索

python - 加载/解析数学编程系统文件

python - 尝试为 python 3 安装 wxPython Phoenix

python - 将小部件关联到组中,用于隐藏和显示,wxpython