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