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开发', '安全验证']

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

使用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”是一定要有的,shell设为Ture不会弹出console,shell设为False则会弹出一个console。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值