使用pyinstaller打包python程序,使用-w参数,去掉console,发现执行命令行的subprocess相关语句报“[ERROR] [WinError 6] 句柄无效”的错误。
去掉-w参数,将console显示的话,就正常。
我本来的语句是:python
#用 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 代码以下:shell
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")
这样就解决了这个问题。函数