• PyQt5界面上调用subprocess.Popen会闪命令窗口的问题


    最近再做一个界面开发,主要实现的点击一个按钮,会执行adb安装应用程序的功能,在调试阶段一切都正常,但打包成一个exe安装程序,安装之后运行,点击按钮会闪一下adb的命令窗口

    先列出subprocess.Popen方法介绍,里面有很多关键字参数

    一、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)

     

    划重点:

    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()来执行子程序

    所以如果不设置shell这个参数时,会默认会启动系统的命令窗口来显示操作,要不让它使用系统的,就将shell=True即可,就不会闪一下命令窗口的问题了。

    将代码重新修改一下再次打包运行,果然就不会闪命令窗口界面了

     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)
  • 相关阅读:
    【转】C#字符串替换_无视大小写
    如何安装inf文件
    IDisposable模式
    VS2005 模板的制作方法
    ASP.NET Client Side State Management
    微软提供正确卸载IE7的方法并恢复IE6!!!!
    Access JavaScript variables on PostBack using ASP.NET Code
    Windows Mobile 5.0 SDK R2 for Pocket PC安装错误解决方案
    Oracle日期函数与应用
    XP下安装IIS6.0的办法
  • 原文地址:https://www.cnblogs.com/aziji/p/12091844.html
Copyright © 2020-2023  润新知