【问题标题】:Python subprocess command to run silent, prevent cmd from appearing [duplicate]Python子进程命令静默运行,防止cmd出现[重复]
【发布时间】:2014-05-03 09:42:30
【问题描述】:

我用 tinker 编写了一些复杂的 Python3 GUI 代码,并用 cx_Freeze 编译。

只有在 Windows 上运行时才会出现此问题。

子进程 check_ouptut(或 Popen)运行类似的命令:

import subprocess
VAL = subprocess.check_output(['adb.exe', 'version'], shell=False, stdout=subprocess.PIPE).decode()

所以我需要捕获输出并将其存储为 VAL。但是,当它发生时,会弹出 cmd 窗口,并在读取值后关闭。我有一组执行类似操作的命令,它导致 adb.exe 在 cmd 窗口中弹出,这真的很烦人。

有没有办法让这些静音,所以 cmd 不弹出?

正如我所提到的,代码作为 GUI/tkinter 运行,使用 cx_Freeze 编译,并且只出现在 Microsoft Windows 上(不会出现在 Linux 上)。

谢谢。

【问题讨论】:

  • 试过添加 \c 吗? ['adb.exe', '\c', 'version']
  • 是的,我试过 '\c' 但没有运气:(
  • 我知道,如果你有 tkinter 源代码,并且想在没有附加命令窗口的情况下运行 GUI,你只需将 .pyc 对象文件重命名为 .pyw ...用cx_Freeze编译的我不知道...你有源代码吗?
  • 使用STARTUPINFO
  • BTW,弹出的窗口是控制台窗口,不是cmd窗口。创建它是因为 adb.exe 被标记为控制台应用程序,就像 cmd.exe 一样。如果不能从父进程继承,则会创建一个新的控制台窗口。此窗口由 csrss.exe 或 conhost.exe (Windows 7+) 托管,因此可以附加多个进程。

标签: python python-3.x subprocess adb cx-freeze


【解决方案1】:

我的解决方案是:

import subprocess,os
startupinfo = None
if os.platform == 'win32':
    startupinfo = subprocess.STARTUPINFO()
    startupinfo.dwFlags |= subprocess.STARTF_USESHOWWINDOW
VAL = subprocess.check_output(['adb.exe', 'version'], shell=False, startupinfo=startupinfo).decode()

【讨论】:

    猜你喜欢
    • 2018-08-13
    • 2021-04-03
    • 1970-01-01
    • 2012-09-10
    • 1970-01-01
    • 1970-01-01
    • 2018-05-08
    • 2015-10-29
    • 1970-01-01
    相关资源
    最近更新 更多