PyQt5界面上調用subprocess.Popen會閃命令窗口的問題

最近再作一個界面開發,主要實現的點擊一個按鈕,會執行adb安裝應用程序的功能,在調試階段一切都正常,但打包成一個exe安裝程序,安裝以後運行,點擊按鈕會閃一下adb的命令窗口shell

先列出subprocess.Popen方法介紹,裏面有不少關鍵字參數app

1、subprocess.Popen
subprocess模塊定義了一個類: Popen
class subprocess.Popen( args,
bufsize=0,
executable=None,
stdin=None,
stdout=None,
stderr=None,
preexec_fn=None,
close_fds=False,
shell=False,
cwd=None,
env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0)spa

 

 

劃重點:debug

cmd_test = "adb install xxx.apk"調試

subprocess.Popen(cmd_test, shell=True)
這是由於它至關於
subprocess.Popen(["cmd.exe", "-c", cmd_test])
在*nix下,當shell=False(默認)時,Popen使用os.execvp()來執行子程序code

因此若是不設置shell這個參數時,會默認會啓動系統的命令窗口來顯示操做,要不讓它使用系統的,就將shell=True便可,就不會閃一下命令窗口的問題了。orm

將代碼從新修改一下再次打包運行,果真就不會閃命令窗口界面了blog

 1     def install_app(self, file):
 2         try:
 3             install_cmd = r"adb install -g -t -r {}".format(file)
 4             log.debug("The install command is: {}".format(install_cmd))
 5             result_output = subprocess.Popen(install_cmd, stdout=subprocess.PIPE, shell=True)
 6             result_lst = result_output.stdout.readlines()
 7             for item in result_lst:
 8                 item_strip = item.decode("gbk").strip()
 9                 log.debug(item_strip)
10                 if "Success" == item_strip:
11                     return True
12             else:
13                 return False
14 
15         except Exception as e:
16             log.debug(e)
相關文章
相關標籤/搜索