我的代码如下:
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
,我应该使用什么语法?我把它放在一个列表中,但它抱怨了。
答案 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', '-']