使用pyinstaller打包,subprocess報「句柄無效」錯誤的解決方法

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

這樣就解決了這個問題。函數

相關文章
相關標籤/搜索