我正在尝试使用linux bash shell echo在文本文件中编写一个json转储字符串。我的问题是它删除所有双引号。
示例代码。
d = {"key": "value"}
"echo %s > /home/user/%s" % (simplejson.dumps(d), 'textfile'))
文本文件中的输出
{key: value}
它删除所有双引号,因此我无法将其加载到json,因为它不再是有效的json。
由于
答案 0 :(得分:3)
您需要为Bash用法转义引号:
("echo %s > /home/user/%s" % (simplejson.dumps(d), 'textfile')).replace('"', '\\"')
答案 1 :(得分:1)
由于您说您正在使用paramiko,因此直接写入文件是完美的。编辑代码以反映paramiko:
您可以在登录服务器后直接写入文件,无需传入bash命令(这是hackish)。 您将需要两个try-catch:一个用于捕获打开文件时的任何错误,另一个用于捕获文件中的任何写入。如果您希望在其中任何一种情况下抛出异常,请删除try-catch。
import paramiko
*do your ssh stuff to establish an SSH session to server*
sftp = ssh.open_sftp()
try:
file = sftp.file('/home/user/textfile', 'a+')
try:
file.write(simplejson.dumps(d))
except IOError:
...*do some error handling for the write here*
except IOError:
...*do some error handling for being unable to open the file here*
else:
file.close()
sftp.close()