使用Pyinstaller的Python子进程Popen

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用Pyinstaller的Python子进程Popen相关的知识,希望对你有一定的参考价值。

我使用ffmpeg转换一些视频。我用subprocess.Popen(...)调用命令

si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW

self.my_pro = subprocess.Popen(cmd,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
startupinfo=si)

(output, error) = self.my_pro.communicate()

我用这种方法杀了

self.my_pro.kill()

这是没有编译到exe的okey。

但我编译与pyinstaller--noconsole子进程无法正常工作。我必须将subprocess.Popen(...)改为subprocess.check_output(...)

但是这次我不能用self.my_pro.kill()杀死进程这不起作用。

我怎么可以运行进程,我可以杀死它将运行pyinstaller noconsole?

答案

正如@jfs所写,使用Popen你必须重定向一切。你忘了stdout

所以这段代码不再对我崩溃:

si = subprocess.STARTUPINFO()
si.dwFlags |= subprocess.STARTF_USESHOWWINDOW

self.my_pro = subprocess.Popen(cmd,
stdin=subprocess.PIPE,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
startupinfo=si)

以上是关于使用Pyinstaller的Python子进程Popen的主要内容,如果未能解决你的问题,请参考以下文章

子进程似乎在 pyinstaller exe 文件中不起作用

Python:当父进程死亡时如何杀死子进程?

pyinstaller打包Windows的exe文件后,多进程导致程序反复重启,python

Python利用multiprocessing实现多进程,Pyinstaller打包python多进程程序出现多个窗口

Pyinstaller打包生成exe文件过大,四种常用处理方法集锦---嵌入式Python-01

pyinstaller打包exe时subprocess无效的解决方法