python - 在不打开系统控制台的情况下调用子进程

标签 python subprocess

我正在尝试从后台运行的进程启动一个 wxPython 应用程序(我已使用 py2exe 将其转换为 exe)。

问题是,当 gui 应用程序打开时,控制台窗口 (c:\windows\system\cmd.exe) 也会打开

我看过this question Alex Martelli 建议将 Popencreationflags 参数设置为 0x08000000 但这并没有解决我的问题。

另外我想知道是否有更好的方法在后台运行进程,目前我只是将脚本的扩展名更改为 pyw 并且因为它没有 GUI 然后它不可见...

这是调用子进程的行

    subprocess.Popen(args="%s"%comPort,bufsize=0,
                     executable="myFrozen_WxpythonApp.exe",
                     creationflags=0x08000000, shell=False)

py2exe 脚本

...

options = {'py2exe': {'compressed': 3,
                          'optimize': 2,
                          'excludes': excludes,
                          'packages': packages,
                          'dll_excludes': dll_excludes,
                          'bundle_files': 1,
                          'dist_dir': 'dist',
                          'xref': False,
                          'skip_archive': False,
                          'ascii': False,
                          #'packages': packages,
                        'custom_boot_script': '',
                         }
                }  

      setup(options=options, windows=["app.pyw"], zipfile=None, data_files=data_files)

更新:

正如我在回答这个问题时所解释的那样,问题出在 subprocess.Popen 调用中。

args 参数中的第一个字符串应该是可执行文件的名称,可执行文件名称后面可以跟任何需要传递给子进程的命令或数据。

最佳答案

在阅读了subprocess.Popen

的文档后,我发现我做错了什么

args 参数中的第一个字符串应该是可执行文件的名称。我没有包括可执行文件的名称,因为我认为这是由 executable 参数处理的。

关于python - 在不打开系统控制台的情况下调用子进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4356365/

相关文章:

python - 如何在 Tornado 路由中实现多个 URL 参数?

python - 重用子流程对象

python - 子进程打开以运行命令(HDFS/hadoop)

python - 最后在 except 中重新抛出异常,在 python 中引发

python - 如何在 matplotlib 中旋转 xticklabels 以使每个 xticklabel 之间的间距相等?

python - 如何在 matplotlib 中将文本框直接放置在图例下方?

python - 在嵌入 C++ 后从 Python 中提取值

Python subprocess.check_output stderr 用法

python - 从 python 克隆 git repo

python - 将进程附加到列表(但不对其进行任何操作)会改变程序行为