【问题标题】:python run CMD command with options [closed]python运行带有选项的CMD命令[关闭]
【发布时间】:2013-10-04 14:41:23
【问题描述】:

这令人沮丧。我搜索了很多,但没有一个结果对我有帮助。我尝试了子流程,但我仍然无法让它工作。基本上我想让这条线工作:

appName = "ap01"
optna = "-server"
optnb = "-filename=c:/test.VS"
optnc = "-display=1"

os.system('start "VSM" "C:/bin/" {appName, optna, optnb, optnc} ')

在 CMD 中我只需键入

CD C:/bin/

按回车,然后:

ap01 -server -filename=C:/test.VS -display=1 

【问题讨论】:

    标签: python cmd system


    【解决方案1】:

    怎么样:

    import os
    
    appName = "ap01"
    opts =[
        "-server",
        "-filename=c:/test.VS",
        "-display=1"
    ]
    
    opts = ' '.join(opts)
    os.system(r'start "" "C:\bin\{:}" {:}'.format(appName, opts) )
    

    很难测试,因为我没有 ap01,但可以使用简单的批处理文件。无论如何,您应该像@l4mpi cmets 一样使用子进程。所以这样做是:

    import subprocess
    import os
    
    app=[
        "ap01.ext",
        "-server",
        "-filename=c:/test.VS",
        "-display=1"
    ]
    
    os.chdir('"C:/bin/')
    subprocess.call(app, shell=True)
    

    请注意,这在 Windows 上有点挑剔,因为它需要知道应用程序的全名。至于天气与否,应用程序是否可以通过 esc 终止取决于 ap01 的性质。如果您通过外壳运行它,是的,它将是可终止的,因为外壳仍然存在并且可以终止。如果你管它,那么它可能会也可能不会。您可能应该使用 INSTSRV.EXE

    将其启动并转换为服务

    【讨论】:

    • 嘿,工作就像一个魅力!就1个问题。如果我从 CMD 运行我的程序,取消它的唯一方法是使用 ctrl+C。现在,如果我按 ESC 从 python 运行它,它也会取消它。有没有办法让 ESC 不会取消我的程序?我为该应用程序编写 GUI 的原因之一是,每次在 Windows 中按 esc 时,我都会意外取消它:(
    • 不怎么样?在python2.4之后没有理由使用os.system,应该首选Popen/subprocess.call;特别是在这种情况下,因为您可以使用 cwd 参数设置工作目录。
    • @l4mpi 我同意,但这就是用户正在使用的,并且没有时间做进一步的事情(手头没有高于 2.3 的 python),因为事情刚刚发生:P 无论如何,现在我已经修改它了再来一次。
    • Heya @l4mpi 很抱歉要求系统,这只是我最成功的方法......我在你的推荐后尝试使用 popen,我确实设法使用这条线让它工作:@ 987654327@ 但是,一旦我将其插入我的 QT 窗口,我就不再获得进度详细信息(在我从 CMD 窗口获得它之前)并且 esc 仍然取消我的计算:( @joojaa 非常感谢这两个代码!他们都工作并帮助我更多地理解它!