我是初学者,试图从Pyramid中的用户获取shell命令并将其传递给 subprocess.check_output [“thisisthecommand”]
变量存储在 myvar 中。例如:myvar =“echo helloworld” 如何在我的子进程check_output中传递这个变量?
我尝试过这个 subprocess.check_output [myvar] 但它不起作用。金字塔抛出错误'AttributeError:NoneType对象没有属性' 请帮忙。
答案 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函数是使用()
而不是[]
调用的 - 后者用于索引序列或按键访问字典。