最近再作一個界面開發,主要實現的點擊一個按鈕,會執行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)