使用pyinstaller打包,subprocess报“句柄无效”错误的解决方法

使用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")

这样就解决了这个问题。

转载于:https://my.oschina.net/u/2396236/blog/1610765

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值