gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-01 06:01:51 27 4
gpt4 key购买 nike

我使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com