以参数作为python变量的子流程调用

以参数作为python变量的子流程调用,python,subprocess,Python,Subprocess,您好,我对Python非常陌生,我正在尝试使用subprocess.call从另一个Python脚本调用子流程。但我的参数是变量名。那么,我应该使用subprocess.call还是subprocess.popen 我想从另一个python脚本执行以下命令: python npp.python -i fname -o fname+"out" -l fname+"log" -e excplist -i ignorelist 那么,我应该怎么做 subprocess.Popen(['python

您好,我对Python非常陌生,我正在尝试使用subprocess.call从另一个Python脚本调用子流程。但我的参数是变量名。那么,我应该使用subprocess.call还是subprocess.popen

我想从另一个python脚本执行以下命令:

python npp.python -i fname -o fname+"out" -l fname+"log" -e excplist -i ignorelist 
那么,我应该怎么做

subprocess.Popen(['python', 'npp.python', '-i', fname , 'o', fname+"out", '-l', fname+"log", '-e', excplist,'-i',ignrlist]).communicate()
我无法通过这样做调用其他程序。对我做错了什么有什么建议吗

仅供参考。 这样做的一个非常简单的方法是预先定义命令,然后将其转换为参数列表

command = "python npp.python -i {file} -o {file}.out -l {file}.log -e {excep} -i {ignore}".format(file=pipe.quote(fname), excep=exceptlist, ignore=ignorelist)

subprocess.call(shlex.split(command)) # shlex.split is safer for shell commands than the usual split
# or popen if the return code isn't needed
subprocess.Popen(shlex.split(command))

这样,以列表形式编写命令时更难出错。

您的想法是正确的,但在
-o
选项中缺少了
-
子进程.call
基本上是
子进程.Popen
,但它返回退出代码。使用
subprocess.Popen
。还有,你能说说出了什么问题吗?为什么代码不起作用?python第三个模块怎么样?如果需要列表,请创建一个列表。不要以字符串开头并将其转换为列表。您是否介意详细说明为什么不应执行上述操作。我知道它为程序增加了一个额外的步骤,但它使查看命令变得更好。在我看来,它很容易解决在以列表形式创建命令时犯愚蠢语法错误的问题,特别是如果它与OPs的情况类似的话。许多其他人也在以同样的方式进行: