python 使用pyinstaller打包时,subprocess失效问题

在使用pyinstaller打包Python程序时,遇到使用`-w`参数隐藏控制台后,程序在subprocess.Popen调用处卡住。解决办法是设置`shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT`。当`shell=True`时,程序通过shell执行命令,避免弹出控制台;而`shell=False`会导致控制台弹出。" 100151268,8336393,ThinkPHP5 验证码使用详解,"['TP5', '验证码', 'PHP框架', 'Web开发', '安全验证']
摘要由CSDN通过智能技术生成

使用pyinstaller将python程序打包,不使用-w参数时(如“pyinstaller -F main.py -i cat.ico”)程序运行正常,但使用-w参数去掉console后,程序便卡在了一个地方无法继续运行,经过调试发现,出问题的地方在subprocess.Popen语句,原来是这样的:

popen = subprocess.Popen(cmd_list, shell=False, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
    while popen.poll() is None:
        line = popen.stdout.readline().decode('utf-8').strip()
        print(line)

将subprocess.Popen的参数设为“shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT”便能正常运行了。将shell设为True后,通过shell执行指定的命令(后台应该默默地创建了一个console?),并利用创建的管道进行输入和输出。

我还试了一下,若将subprocess.Popen的参数设为“shell=False, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT”,则打包运行程序后会弹出来一个console,也就是说“stdin=subprocess.PIPE”是一

  • 4
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值