这是场景。我想从python脚本中运行命令行程序。 该命令将在执行后生成一个文件,我将进一步阅读 操作。 我想传递一个文件名作为函数参数。
def myfunc(myinputfile,myoutputfile):
cmd = "mycommand -i %s -o %s" %(myinputfile,myoutputfile)
我尝试使用subprocess.call但显然它需要我将commandname和arguments编写为list的单独条目。我还有其他办法吗?此外,重要的是命令在继续之前执行,因为我希望稍后在脚本中将文件的输出读入变量。
答案 0 :(得分:1)
除非您使用的是shell=True
,否则您需要将参数的列表传递给subprocess
:
def myfunc(myinputfile,myoutputfile):
cmd = ['mycommand', '-i', myinputfile, '-o', myoutputfile]
顺便说一句,这使得很多更容易将变量值用作参数..
答案 1 :(得分:0)
如果你想调用shell命令我建议:
d = dict(os.environ.copy()) #copy enviroment
cmd = "mycommand -i %s -o %s" %(myinputfile,myoutputfile)
p = subprocess.Popen(cmd, shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.STDOUT,env=os.environ,cwd=PATHWHEREYOUHAVEACOMMAND,close_fds=True)
如果要打开终端并运行命令:
d = dict(os.environ.copy())
cmd4="mycommand -i %s -o %s" %(myinputfile,myoutputfile)
cmd="gnome-terminal --working-directory=%s --title='your title' --command='%s' " % (yourpath,cmd4)
p = subprocess.Popen(cmd, shell=True,stdin=subprocess.PIPE,stdout=subprocess.PIPE, stderr=subprocess.STDOUT,env=os.environ,cwd=PATHWHEREYOUHAVEACOMMAND,close_fds=True)