python - 使用 Python 执行 shell 脚本?

标签 python bash shell subprocess

我的 JSON 文档 jsonStr 中有一个 shell 脚本。我正在尝试在反序列化 jsonStr 后使用 Python 子进程模块执行该 shell 脚本 -

#!/usr/bin/python

import subprocess
import json

jsonStr = '{"script":"#!/bin/bash \\n STRING="Hello World" \\n echo $STRING \\n"}'
j = json.loads(jsonStr)

print "start"
subprocess.call(j['script'], shell=True)
print "end"

但不知何故,每当我运行上面的 python 脚本时,我总是会收到这样的错误 -

Traceback (most recent call last):
  File "shellscript", line 27, 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: Expecting , delimiter: line 1 column 34 (char 34)

有没有想过我在这里做错了什么?

最佳答案

似乎 JSON 解析器被“inside a ”混淆了,尤其是在它说 hello world 的地方。

观察到所有 JSON 转义规则都可以通过向 python JSON 库询问正确的字符串来优雅地获得。

import json
jsoncnt = {'script':'#!/bin/bash \n STRING="Hello World" \n echo $STRING \n'}
jsonStr = json.dumps(jsoncnt)
print jsonStr
q = json.loads(jsonStr)

关于python - 使用 Python 执行 shell 脚本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20756905/

相关文章:

python - UNIX 上的 CPU 利用率

python - 如何循环遍历相关矩阵以仅提供高于特定阈值的相关对?和/或提高效率

python - 迭代数据帧时所做的更改不会保存

bash - 在 Bash 中,grep 查找一行并将该行打印到文件中,但包含更多信息

python - 通过Python制作bash脚本密码的窗口

java - 使用 Java 的进程生成器生成多个进程

ios - 获取预处理器宏的特定值

python - Django 命中计数基于类的 View

python - 如何将 EOF 发送到 paramiko 中的标准输入?

bash - 如何让 bash 从 stdin 执行 ELF 二进制文件?