在python中将文件名传递给shell命令

时间:2014-01-06 12:33:03

标签: python shell

这是场景。我想从python脚本中运行命令行程序。 该命令将在执行后生成一个文件,我将进一步阅读 操作。 我想传递一个文件名作为函数参数。

 def myfunc(myinputfile,myoutputfile):
     cmd = "mycommand -i %s -o %s" %(myinputfile,myoutputfile)

我尝试使用subprocess.call但显然它需要我将commandname和arguments编写为list的单独条目。我还有其他办法吗?此外,重要的是命令在继续之前执行,因为我希望稍后在脚本中将文件的输出读入变量。

2 个答案:

答案 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)