Python脚本如何在JSON文档中有效地存储bashshell脚本

2024-04-25 06:34:43 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在研究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}$

现在我的问题是-

  1. 我如何在JSON字符串中构造bashshell脚本,以便在将它从另一个用Java编写的程序存储到zookeeper节点时不需要额外的工作。在
  2. 在执行shell脚本时,也不需要额外的工作,从Python程序的JSON字符串中提取它。?在

我的意思是,在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字符串。。在


Tags: 字符串inecho程序脚本jsonhellofor
2条回答

使用json。在

json.encoder.encode_basestring_ascii('{"script":"#!/bin/bash\necho Hello world 1\n}')

如果您恢复到问题的早期修订版,其中在json文档中正确使用了\n,而不是{},那么您不需要做任何。这是an example。在

当您将json文档指定为Python字符串文本时,您可能会感到困惑,在这种情况下不需要(也不应该)这样做。在

data在json字符串中包含文本换行。它不是有效的json。没有json生成器会生成这样的文本。不要在Java代码中手动生成json文本,而是使用任何json库。在

您的最新示例在json字符串中包含未转义的引号。它使它成为无效的json。更换

"a "$b" c"

-就像用绳子

^{pr2}$

json字符串。print repr(json_string)看起来像:

'"a \\"$b\\" c"'

也就是说,斜线是双转义的。除非使用Python字符串文本指定json字符串,否则不要使用双转义。意思是,如果您的json来自zookeeper,那么您不应该这样做。在

相关问题 更多 >