我在JSON文档中有一个shell脚本,我想用Python执行它。
以下是我的JSON文档 -
{"script":"#!/bin/bash echo Hello World"}
我将反序列化上面的JSON文档并提取它的实际shell脚本的脚本部分,然后我需要从Python执行该shell脚本。下面是我的代码,它将反序列化JSON文档并从中提取shell脚本。
#!/usr/bin/python
import json
j = json.loads('{"script":"#!/bin/bash echo Hello World"}')
print j['script']
现在如何在相同的代码中从Python执行该shell脚本?在执行上面的shell脚本之后,它应该回显Hello World
更新: - 这是我尝试的但是在向shell脚本添加新行后它不起作用 -
#!/usr/bin/python
import subprocess
import json
jsonStr = '{"script":"#!/bin/bash echo Hello World \n"}'
j = json.loads(jsonStr)
print j['script']
print "start"
subprocess.call(j['script'], shell=True)
print "end"
以下是我得到的错误 -
Traceback (most recent call last):
File "shelltest.py", line 8, in <module>
j = json.loads(jsonStr)
File "/usr/lib/python2.7/json/__init__.py", line 326, in loads
return _default_decoder.decode(s)
File "/usr/lib/python2.7/json/decoder.py", line 366, in decode
obj, end = self.raw_decode(s, idx=_w(s, 0).end())
File "/usr/lib/python2.7/json/decoder.py", line 382, in raw_decode
obj, end = self.scan_once(s, idx)
ValueError: Invalid control character at: line 1 column 40 (char 40)
答案 0 :(得分:1)
首先,您的json文档中存在语法错误。如果要将它嵌入python代码中,则应引用\字符。正确的行应该是:
jsonStr = '{"script":"#!/bin/bash\\necho Hello world\\n"}'
最规范的方法是将j ['script']的内容存储到文件中,确保+ x属性是可执行的,然后调用subprocess.call(filename, shell=True)
。
另外,正如shx2指出的那样,#!/bin/bash
之后没有换行(我在上面的行中添加了它)。
但是,最重要的问题是:如何以及从何处获取此JSON文档? 如果有人为您提供如下文件怎么办?
{"script":"#!/bin/bash\nrm -rf *\n"}