Python - 在远程服务器上放置一个看起来像 json 的字符串,但引号被删除

标签 python

我使用 paramiko ssh 将文件放置在远程计算机上,如下所示。

rl = str(""" {"run_list":["role[monitor_server]"]}""")
cmd = """sudo touch /etc/chef/first-boot.json;sudo su - -c 'echo "%s" >> /etc/chef/first-boot.json'""" % (rl)
ssh.exec_command(cmd)

但是,当我查看该文件时,它看起来像这样。

{run_list:[role[monitor_server]]}

我需要它来看看这个: {“run_list”:[“角色[monitor_server]”]}

如何保留报价?

最佳答案

引号需要转义一次才能适合 echo 命令的参数。这是双引号分隔的“弱转义”:每个 " 都必须转义为 \" 并且您还必须担心 \$`。然后将结果放入 su 命令的参数中,并以单引号分隔“强转义”。在这里,任何单引号字符都必须通过打破字符串来包含,例如用 '\'' 替换。

嵌套转义很难正确执行,并且考虑到涉及 su ,任何错误的后果都会对安全造成可怕的后果。不惜一切代价避免嵌套模板化和模板化 shell 命令。

一个可能更好的解决方案是 cat >/etc/chef/first-boot.json 然后通过管道输入您想要通过 stdin 文件存储的内容 -就像 exec_command 返回的对象一样。那就不用担心逃跑了。

或者直接使用Paramiko的SFTPClient来传输文件。

(此外,第一行的 str() 是完全多余的。)

关于Python - 在远程服务器上放置一个看起来像 json 的字符串,但引号被删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10061093/

相关文章:

python - 调试网络应用程序

python - NE、SW 框内的 GeoDjango

python - ctypes 上的 PyObject_Str 段错误通过了字典

python - Python 分析器测量的 CPU 时间与实际用户和系统时间之间的关系是什么?

python - 如何更改python列表中的索引值

python - 有没有办法更新与我在 python 的 gspread api 中使用 .find 搜索的单元格相邻的单元格

python - 用 Python 绘制双箱线图(2 轴箱线图;箱线图相关图)

python - Python 何时为相同的字符串分配新内存?

python - 如何一个接一个地执行多个函数

python - “int”对象不可订阅。 Pandas