如何在subprocess_check_output中传递用户输入变量?

时间:2015-01-20 11:11:18

标签: python shell pyramid

我是初学者,试图从Pyramid中的用户获取shell命令并将其传递给 subprocess.check_output [“thisisthecommand”]

变量存储在 myvar 中。例如:myvar =“echo helloworld” 如何在我的子进程check_output中传递这个变量?

我尝试过这个 subprocess.check_output [myvar] 但它不起作用。金字塔抛出错误'AttributeError:NoneType对象没有属性' 请帮忙。

1 个答案:

答案 0 :(得分:1)

根据documentation(以及其中的示例),您需要在列表中分隔命令和参数。 e.g,

subprocess.check_output(['echo', 'hello'])

应该有效。有一个shell选项可以让您编写subprocess.check_output('echo hello', shell=True),但出于安全考虑,最好不要单独使用。

如果您使用包含该命令的变量myvar,则可以使用shlex.split()生成适合传递给check_output()的列表:

import shlex, subprocess
myvar = 'echo hello'
args = shlex.split(myvar)
output = subprocess.check_output(args)
>>> args
['echo', 'hello']

顺便提一下,Python函数是使用()而不是[]调用的 - 后者用于索引序列或按键访问字典。