1

我有如下代码:

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我希望避免的情况,我应该使用什么语法?我有它在一个列表中,但它抱怨这一点。

4

2 回答 2

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...] 的列表,我们通过连接一个常量部分列表来构造一个,其中一个与我们的可变部分。

于 2013-04-10T11:19:39.373 回答
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', '-']
于 2013-04-10T11:20:03.823 回答