将命令行参数传递给子进程模块

时间:2015-12-04 02:23:44

标签: python perl subprocess popen

我有一个python脚本,它使用子进程模块调用perl脚本。

在终端i中运行像这样的perl脚本

perl email.pl raj@gmail.com

我将raj@email.com作为该脚本的命令行参数传递

这是我的Python脚本

import subprocess

pipe = subprocess.Popen(["perl","./email.pl"])
print pipe

这很好用

但如果我传递参数,则会抛出未找到的文件

import subprocess

pipe = subprocess.Popen(["perl","./email.pl moun"])
print pipe

错误:

<subprocess.Popen object at 0x7ff7854d6550>
Can't open perl script "./email.pl moun": No such file or directory

在这种情况下,我怎么能传递命令行参数?

1 个答案:

答案 0 :(得分:1)

该命令可以是字符串:

pipe = subprocess.Popen("perl ./email.pl moun")

或列表:

pipe = subprocess.Popen(["perl", "./email.pl", "moun"])

当它是一个列表时,Python将逃脱特殊字符。所以当你说

pipe = subprocess.Popen(["perl","./email.pl moun"])

它叫

perl "./email.pl moun"

但文件“email.pl moun”不存在。

以上是一个粗略的解释,仅适用于Windows。有关更多详细信息,请参阅@ShadowRanger的评论。