【发布时间】:2013-11-19 21:59:39
【问题描述】:
我在 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)
【问题讨论】:
-
我假设您知道执行用户提供的 sn-ps 的安全隐患...
-
老实说,我不知道 :( .. 你能告诉我还有什么问题吗?现在,我会尝试解决这个问题,如果看起来会有一个严重的问题,我会尝试寻找其他解决方案。
-
另外,脚本不会像发布的那样运行。您需要添加换行符以使其成为有效的脚本。
-
@SilasRay:我已经用我尝试过的代码更新了我的问题,但它对我不起作用......
-
#!/bin/bash echo Hello World不是一个有效的 shell 脚本(或者,它是一个有效的注释,但它不做任何事情)。在echo之前跳过 shebang 行或换行。