欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

完美解决pyinstaller因为-w打包的exe文件与os.popen和subprocess.Popen都执行失败的问题

程序员文章站 2024-02-03 22:05:40
...

pyinstaller打包遇到py文件中有os.popen()命令,os.popen执行失败的问题

参考了文章:https://blog.csdn.net/qq_26373925/article/details/105521118
这篇文章里面讲解了使用subprocess.Popen代替os.popen解决冲突问题

proc = subprocess.Popen('cmd命令', shell=True, 
							stdout=subprocess.PIPE,   # 管道标准输入
							stderr=subprocess.STDOUT,   # 管道标准输出
							stdin=subprocess.PIPE)   # 管道错误输出

Ok,当我查阅了很多资料之后,看到这篇文章,卧槽,牛逼,问题解决了,使用pyinstaller -F打包文件之后,打开exe文件subprocess.Popen里面的cmd命令能执行了
???问题以为到这里就完事了?写个exe文件总不能只给自己用吧,当我把文件给到别人的电脑上运行的时候,???问题重现了,subprocess.Popen不好使了

pyinstaller打包遇到py文件中有subprocess.Popen命令,执行cmd也失败了

现在的情况是:
os.popen()的py文件打包成exe,自己的电脑cmd命令不执行,os.popen执行失败
含有subprocess.Popen的py文件打包成exe,自己电脑能成功运行cmd命令,别人电脑就执行失败了

???问题到这里头大了,看到有的文章说找os.system()来执行cmd命令,Ok,好使是好使,但是pyinstaller的-w命令去除不了os.system()弹出的黑框,黑框???这我怎么能忍受呢

问题得到解决,原来是使用pyinstaller的-F命令搞得鬼,
-F:打包成单一执行文件
改成:
-D:打包成一系列以来文件的exe文件

命令的话,举个简单例子:(使用os.popen和subprocess.Popen命令的例子就不举了,打包命令都是一样的)
我的目录结构如下:
完美解决pyinstaller因为-w打包的exe文件与os.popen和subprocess.Popen都执行失败的问题
打包命令:

pyinstaller -D demo.py -p demo1.py -p demo2.py --hidden-import demo1 --hidden-import demo2 -w -i xin.ico
# 或者是
pyinstaller -D demo.py -p demo1.py -p demo2.py --hidden-import fun_1 --hidden-import fun_2 -w -i xin.ico

上面一定要是-D打包的,不能是-F,不然os.popen和subprocess.Popen命令都会失效

再把项目中用到本地文件复制到exe同级目录之下,打开exe就可以使用了,别人电脑也可以使用
生成的目录结构如下:
完美解决pyinstaller因为-w打包的exe文件与os.popen和subprocess.Popen都执行失败的问题
到这里就结束了,我也自己把问题解决了,woc,自己牛b,
我也不知道为啥-D为啥就能解决这个问题,打3个反问号¿¿¿