如何从Python执行shell脚本?

时间:2013-11-19 21:59:39

标签: python json bash shell

我在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)

1 个答案:

答案 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"}