繁体   English   中英

在 Windows 10 上使用 tkinter 在 GUI 后台运行控制台 window

[英]Running console window in background for GUI using tkinter on Windows 10

所以我有这个用 tkinter 制作的 GUI,一切正常。 它所做的是连接到服务器并为 Linux 或 Windows 发送命令。 我继续使用 pyinstaller 创建一个没有控制台的窗口 GUI,当我尝试使用特定的 function 发送 Windows 命令时,它将失败。 如果我使用在 GUI 之前弹出的控制台创建 GUI,它就像一个魅力。 我想弄清楚的是如何让我的 GUI 与用户不可见的控制台一起工作。

我的代码中有问题的部分围绕子流程。 为了让大家免于我编写的 400 多行代码,我提供了有问题的特定代码。 这是片段:

def rcmd_in(server):
    import subprocess as sp
    for i in command_list:
        result = sp.run(['C:/"Path to executable"/rcmd.exe', '\\\\' + server, i],
                 universal_newlines=True, stdout=sp.PIPE, stderr=sp.STDOUT)
        print(result.stdout)

参数“server”是从另一个调用“rcmd_in”的 function 传递的,“command_list”是在代码根目录中创建的可变列表,可供所有函数访问。

现在,我已经尽职尽责了。 我进行了多次搜索,并对我的代码进行了编辑,试图在该控制台不可见的情况下运行我的代码,使用以下链接中的信息找到: recipe-subprocess 这是编辑的样子:

def rcmd_in(server):
    import subprocess as sp
    import os, os.path
    si = sp.STARTUPINFO()
    si.dwFlags |= sp.STARTF_USESHOWWINDOW
    for i in command_list:
        result = sp.run(['C:/"Path to executable"/rcmd.exe', '\\\\' + server, i],
                       universal_newlines=True, stdin=sp.PIPE, stdout=sp.PIPE, 
                       stderr=sp.STDOUT, startupinfo=si, env=os.environ)
        print(result.stdout)

我现在遇到的问题是当它运行时弹出“错误:8 - 内部错误-109”的错误。 让我补充一下,我尝试使用函数 'call()'、'Popen()' 和其他函数,但似乎只有 'run()' 有效。

我已经到了让我的大脑受伤的地步,我可以寻求帮助。 有什么建议么? 与往常一样,我永远对任何人的帮助都充满热情。 提前致谢!

我想通了,只花了我 5 天::D

看起来 function 失败的原因在于 Windows 如何处理标准输入。 我找到了一篇帮助我编辑代码以使用 pyinstaller -w (--noconsole) 的帖子。 这是更新的代码:

def rcmd_in(server):
    import subprocess as sp
    si = sp.STARTUPINFO()
    si.dwFlags |= sp.STARTF_USESHOWWINDOW
    for i in command_list:
        result = sp.Popen(['C:/"Path to executable"/rcmd.exe', '\\\\' + server, i],
                       universal_newlines=True, stdin=sp.PIPE, stdout=sp.PIPE, 
                       stderr=sp.PIPE, startupinfo=si)
        print(result.stdout.read())

注意函数 'run()' 到 'Popen()' 的变化。 'run()' function 不适用于最后的打印语句。 此外,对于那些好奇的人来说,我创建的“si”变量正在阻止“子进程”在使用 GUI 运行时打开控制台。 我希望这对为此苦苦挣扎的人有用。 干杯

暂无
暂无

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

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