Python脚本使用pyinstaller打包运行时,报get_handles OSError: [WinError 6] 句柄无效的解决方法

49 篇文章 2 订阅
28 篇文章 4 订阅
文章讲述了在使用pyinstaller打包Python程序时遇到的WinError6句柄无效错误,通过将subprocess.check_output替换为Popen并配合使用wait()方法解决。作者提供了详细的解决步骤和打包指令。
摘要由CSDN通过智能技术生成

一、错误信息

File  "subprocess.py",  line  728,  in  __init__      File  "subprocess.py",  line  1025,  in  _get_handles  OSError:  [WinError  6]  句柄无效。

二、解决方法

使用 pyinstaller 打包 python 程序,使用 - w 参数,去掉 console,发现执行命令行的 subprocess 相关语句报 “[ERROR] [WinError 6] 句柄无效” 的错误。
去掉 - w 参数,将 console 显示的话,就正常。
我原本的语句是:

#用 subprocess.check_output获取adb devices命令运行的输出
deviceInfo = subprocess.check_output('adb devices').decode().split("\r\n")

这里需要获得命令的运行输出,试了好多方案,最终可行的方案是用 subpross.Popen 来替代 subprocess.check_output,

Popen 函数加入如下参数:

shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE


Popen 方法执行命令,父进程不会等待子进程。这个时候需要用 wait () 方法来等待运行的结果。
这里用自己写的 subprocess_check_output 来替代 subprocess.check_output 代码如下:

def subprocess_check_output(*args):
    p = subprocess.Popen(*args,shell=True, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
    msg = ''
    for line in p.stdout.readlines():
        msg += line.decode()
    status = p.wait()
    return msg

deviceInfo = subprocess_check_output('adb devices').split("\r\n")

这样就解决了这个问题。

三、打包指令

@echo off
echo py文件自动打包工具
set file_path="XXX.py"
echo.
echo 目标文件路径=%file_path%
echo.
pyinstaller -F -i .\XXX.ico %file_path%
echo 打包完成.
start .\dist
pause

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

《代码爱好者》

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值