2013-09-28 171 views
-3

这令人沮丧。我搜查了很多,但没有结果帮助我。我尝试了子进程,但我仍然无法使它工作。基本上,我想这条线的工作:python运行带选项的CMD命令

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 

回答

0

怎么样:

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评论一样使用子流程。因此,这将做的是:

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的性质。如果你通过shell来运行它,那么它是可以终止的,因为shell继续存在并且可以被终止。如果你管它,那么它可能会或可能不会。您应该启动并将其转换为服务INSTSRV.EXE

+0

贺雅,作品像一个魅力!只有1个问题。如果我从CMD运行我的程序,取消它的唯一方法是如果我使用Ctrl + C。现在,如果我按下ESC从python运行它,它也会取消它。有没有办法让ESC不会取消我的程序?我为该应用编写图形用户界面的原因之一是,我每次按窗口中的esc时都会意外地取消它:( – Dariusz

+0

怎么样?没有理由在python2.4之后使用'os.system','Popen ''''''subprocess.call'应该是首选的;特别是在这种情况下,因为你可以用'cwd'参数设置工作目录。 – l4mpi

+0

@ l4mpi我同意但用户正在使用它并没有时间去做更进一步的(因为事情刚刚发生,没有python)因为事情刚刚发生:P无论如何,现在我不再修改它,现在我有时间了 – joojaa