2017-08-11 28 views
0

我通过Python脚本编写的qemu QGA命令是这样的:如何在python命令行中将此json字符串编写为param?

python cmd.py request:'{"execute": "guest-execute", "session": "4768", "arguments": {"commands": [{"command": "/bin/sh", "arguments": ["sh", "-c", "route | grep default | awk '{print $2}'"]}]}}' 

但帕拉姆被解析成波纹管,其中devide从JSON字符串 '{打印$ 2}':

['cmd.py', 'request:{"execute": "guest-execute", "session": "4768", "arguments": {"commands": [{"command": "/bin/sh", "arguments": ["sh", "-c", "route | grep default | awk {print', '}"]}]}}'] 

实际我想这一点,这是awk {print'{print $2}' shell命令在虚拟机中运行,而这种格式无法改变:

['cmd.py', 'request:{"execute": "guest-execute", "session": "4768", "arguments": {"commands": [{"command": "/bin/sh", "arguments": ["sh", "-c", "route | grep default | awk {print'{print $2}'}"]}]}}'] 

这可能吗?如果不可能,这意味着我必须在cmd.py中手动构建json字符串?

谢谢〜

+0

您必须删除空格并为您的引号使用反斜杠。这样,你的整个json字符串将被视为只有一个参数。 – iFlo

回答

1

你不小心嵌入到其他单引号单引号: 如果我离开了你会得到如下字符串的第一部分:

request:'... | awk '{print $2}'"]}]}}'

是壳的看到作为三部分,并试图解决$2那里:

request:'... | awk '{print $2}'"]}]}}'

如果你想嵌入其他单引号单引号,你必须做这样的:

echo 'This string contains '\'' <- an embedded quote'

所以你的情况完整的命令应该是

python cmd.py request:'{"execute": "guest-execute", "session": "4768", "arguments": {"commands": [{"command": "/bin/sh", "arguments": ["sh", "-c", "route | grep default | awk '\''{print $2}'\''"]}]}}'

相关问题