【问题标题】:convert os.system to subprocess.Popen将 os.system 转换为 subprocess.Popen
【发布时间】:2018-04-30 20:43:57
【问题描述】:

我正在编写一个脚本来打开一个新的命令提示符并运行一个可执行文件。我得到了一个使用os.system 的工作代码。你能帮我把它改成subprocess.Popen吗?

hello_exe = r'c:\hello.exe'
os.system("start cmd /k {}".format(hello_exe))

我无法将hello_exe 作为后台进程运行,因为我希望用户看到命令提示符并能够滚动浏览日志。任何帮助表示赞赏。谢谢。

我的环境:Windows8 和 python 2.7.12

【问题讨论】:

  • 使用subprocess.call('cmd.exe /k "{}"'.format(hello_exe), creationflags=subprocess.CREATE_NEW_CONSOLE)cmd.exe /k 这里的唯一目的是在 hello.exe 退出后留下一个附加到控制台的进程。否则它不是必需的,并且与分配新控制台无关。如果在 hello.exe 退出后控制台可以关闭,请忽略它。
  • 感谢您的回答。但是,我不能直接使用它,因为 hello_exe 是一个无限期运行的程序(只有在被用户关闭或被我的 python 脚本终止时才会终止)。而且我不希望 subprocess.call() 阻止我的脚本。我将 .call 更改为 .Popen,它完成了我想要的工作。非常感谢,您的 creationflags 发挥了我在文档中找不到的魔力

标签: python-2.7 cmd subprocess os.system


【解决方案1】:

转换成subprocess.Popen是这样的:

import subprocess

process = subprocess.Popen(r'c:\hello.exe', shell = True)
process.communicate()

【讨论】:

    【解决方案2】:

    转换为 Popen

    from subprocess import Popen, PIPE
    
    hello_exe = r'c:\hello.exe'
    
    proc = Popen(hello_exe, stdout=PIPE, shell = True)
    proc.communicate()
    

    这里有几个链接可以参考了解subprocess.Popen

    Link to understand Popen

    Another link to understand Popen

    Link to 50+ examples of Popen

    【讨论】:

    • 谢谢。第一个答案中提到的 creationflags 确实起到了作用
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-03-09
    • 2015-05-20
    • 2011-06-16
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 2022-01-25
    相关资源
    最近更新 更多