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

7 投票
1 回答
2704 浏览
提问于 2025-04-16 08:02

我正在尝试从一个后台运行的进程启动一个wxPython应用程序(我已经用py2exe把它转换成了exe文件)。

问题是,当这个图形界面应用程序打开时,命令行窗口(c:\windows\system\cmd.exe)也会一起打开。

我查看了 这个问题,其中Alex Martelli建议将 Popencreationflags 参数设置为 0x08000000,但这并没有解决我的问题。

我还想知道有没有更好的方法来在后台运行一个进程,目前我只是把脚本的扩展名改成了 pyw,因为它没有图形界面,所以就看不见了……

这是调用子进程的那一行

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

1 个回答

3

我在阅读了subprocess.Popen的文档后,终于明白我哪里做错了。

args参数中的第一个字符串应该是可执行文件的名字。我之前没有把可执行文件的名字写上,因为我以为用executable参数就可以解决这个问题。

撰写回答