我正在研究Python和bashshell脚本。我有一个单独的程序,它将把bashshell脚本存储在JSON文档中(在zookeeper节点中),JSON文档将如下所示-
{"script":"#!/bin/bash\\necho Hello world 1\\n"}
现在从Python程序中,我需要读取上面的JSON文档(从zookeeper节点),然后提取它的script
部分,然后执行shell脚本。在
正如您在上面的json字符串中看到的,我需要以这样的方式存储bashshell脚本,以便在从Python脚本中的json字符串检索数据时能够成功地执行它。在
这意味着,我需要对某些内容进行转义,并在JSON字符串中的bashshell脚本中添加\\n
以使其正常工作。在
现在从Python脚本中,我可以这样做-
^{pr2}$现在我的问题是-
我的意思是,在JSON文档中存储bigbashshell脚本的最佳方法是什么?从Python脚本执行它有多容易?在
我可能还有大约60-70行shell脚本。在
更新:-
我从Zookeeper得到的JSON文档如下-
data, stat = zk.get(node)
jsonString = data.decode("utf-8")
jStr = json.loads(jsonString)
shell_script = j['script']
我在Python中为Zookeeper使用Kazoo API。这就是方法-
http://kazoo.readthedocs.org/en/latest/api/client.html#kazoo.client.KazooClient.get
那么如何在JSON文档中将这个shell脚本表示为shell脚本呢。。下面的shell脚本接受Python程序中的某些参数。我在Python程序中有这些参数,我通过os.env
发送它
#!/bin/bash
hello=$jj1
echo $hello
echo $jj1
echo $jj2
for el1 in $jj3
do
echo "$el1"
done
for el2 in $jj4
do
echo "$el2"
done
for i in $( ls ); do
echo item: $i
done
这样我就可以从Python脚本成功地执行它了?在
我就是这样表示它的,我将把这个JSON字符串从Java程序写到zookeeper节点-
{"script":"#!/bin/bash \n hello=$jj1 \n echo $hello \n echo $jj1 \n echo $jj2 \n for el1 in $jj3 \n do \n echo "$el1" \n done \n for el2 in $jj4 \n do \n echo "$el2" \n done \n for i in $( ls ); do \n echo item: $i \n done"}
当我在命令下运行-
jsonStr = '{"script":"#!/bin/bash hello=$jj1 echo $hello echo $jj1 echo $jj2 for el1 in $jj3 do echo \"$el1\" done for el2 in $jj4 do echo \"$el2\" done for i in $( ls ); do echo item: $i done"}'
print repr(jsonStr)
这个在控制台上打印出来了-
'{"script":"#!/bin/bash hello=$jj1 echo $hello echo $jj1 echo $jj2 for el1 in $jj3 do echo "$el1" done for el2 in $jj4 do echo "$el2" done for i in $( ls ); do echo item: $i done"}'
这是一个有效的JSON字符串。。在
使用json。在
json.encoder.encode_basestring_ascii('{"script":"#!/bin/bash\necho Hello world 1\n}')
如果您恢复到问题的早期修订版,其中在json文档中正确使用了},那么您不需要做任何 。这是an example。在
\n
,而不是{当您将json文档指定为Python字符串文本时,您可能会感到困惑,在这种情况下不需要(也不应该)这样做。在
data
在json字符串中包含文本换行。它不是有效的json。没有json生成器会生成这样的文本。不要在Java代码中手动生成json文本,而是使用任何json库。在您的最新示例在json字符串中包含未转义的引号。它使它成为无效的json。更换
-就像用绳子
^{pr2}$json字符串。
print repr(json_string)
看起来像:也就是说,斜线是双转义的。除非使用Python字符串文本指定json字符串,否则不要使用双转义。意思是,如果您的json来自zookeeper,那么您不应该这样做。在
相关问题 更多 >
编程相关推荐