传入popen参数

时间:2013-04-10 11:14:30

标签: python subprocess

我的代码如下:

proc = subprocess.Popen(["/path/to/program", '-c', '-', ran_opt_get_ap], stdout=subprocess.PIPE) 

我想将"/path/to/program", '-c', '-'提取到变量中,以便我可以轻松地更改它。 我为cmd_here尝试了一些不同的语法,它们会出现各种错误,但正确的方法是什么?这是我尝试的一个例子:

cmd_here = "/jffs2/usbflash0/ran/rancli -c -"
proc = subprocess.Popen([cmd_here, ran_opt_get_ap], stdout=subprocess.PIPE) 

这仅适用于我希望避免的shell=True,我应该使用什么语法?我把它放在一个列表中,但它抱怨了。

2 个答案:

答案 0 :(得分:2)

应该有效的东西(不经过测试):

constant_cmd_part = ["/path/to/program", "-opt", "-more_opt"]
proc = subprocess.Popen(constant_cmd_part + [variable_part],
                        stdout=subprocess.PIPE)

基本上,subprocess.Popen想要一个初始参数,它是[binary,args ...]的列表,我们通过连接一个常量部分列表来构造一个,其中一个包含我们的变量部分。

答案 1 :(得分:2)

您可以使用split函数生成相应的列表:

cmd_here = "/jffs2/usbflash0/ran/rancli -c -"
# split string to a list
args = cmd_here.split()
args.append(ran_opt_get_ap)
proc = subprocess.Popen(args, stdout=subprocess.PIPE)

拆分命令的结果:

cmd_here = "/jffs2/usbflash0/ran/rancli -c -"
In [2]: cmd_here.split()
Out[2]: ['/jffs2/usbflash0/ran/rancli', '-c', '-']