【问题标题】:Redirect output of a .bat file run by a python script to GUI, and making that script into EXE将 python 脚本运行的 .bat 文件的输出重定向到 GUI,并将该脚本制作成 EXE
【发布时间】:2013-06-13 17:44:18
【问题描述】:

我目前编写了一个 Python 文件,它使用 wxPython 创建一个 GUI,允许用户输入一些字段,然后在其他位置运行一个 .bat 文件,发送这些参数。 .bat 文件在命令提示符下打印大量输出,我想将其重定向到我的 GUI 中的文本框,或者让我的 GUI 弹出一个新的命令提示符来运行 .bat 文件。我写这篇文章的目的是让它成为一个独立的 .exe 文件,那么哪个选项更好,我该如何实现它?

编辑:我能够通过专门为它创建一个新类来重定向 Python 文件本身的输出:

class RedirectText(object):
    def __init__(self,aWxTextCtrl):
        self.out=aWxTextCtrl
    def write(self,string):
        self.out.WriteText(string)

但是,它不处理我正在使用 subprocess.Popen 运行的 .bat 文件的输出。

【问题讨论】:

标签: python user-interface batch-file wxpython


【解决方案1】:

我使用 subprocess 和 wx 编写了一些东西,在其中运行 ping、traceroute 和其他一些东西,并将它们的输出重定向到我的文本控件。这有点棘手,但还不错。我在我的博客上写了一篇关于它的教程:

我使用的重定向功能很像你自己的,然后在我设置了重定向之后,我会执行以下操作:

#----------------------------------------------------------------------   
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()

【讨论】:

  • 注意:如果 .readline() 阻塞;它还会阻止 GUI。您可能需要一个后台线程来读取输出并将其排入队列,例如,使用wxCallAfter()
  • 确实如此,虽然我的应用程序中实际上还没有发生这种情况
【解决方案2】:

您可以使用subprocess module 来调用您的脚本 在 Linux 上调用“ls”命令的示例:

>>> from subprocess import call
>>> call(['ls', '-l'])
total 0
-rw-rw-r-- 1 user group 0 Jun 17 18:37 file1
-rw-rw-r-- 1 user group 0 Jun 17 18:37 file2
-rw-rw-r-- 1 user group 0 Jun 17 18:37 file3
0

【讨论】:

    猜你喜欢
    • 2017-08-31
    • 1970-01-01
    • 2014-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多