2015-02-06 167 views
1

我想寫一個json轉儲字符串使用linux bash shell echo在文本文件中。我的問題是它刪除所有雙引號。echo json to textfile刪除雙引號

示例代碼。

d = {"key": "value"} 
"echo %s > /home/user/%s" % (simplejson.dumps(d), 'textfile')) 

輸出在文本文件

{key: value} 

它消除了所有的雙引號,所以我不能加載到JSON,因爲它不是一個有效的JSON了。

謝謝

+2

你爲什麼不寫,直接從Python中的文件,而不是生成的bash代碼? – Barmar 2015-02-06 03:17:54

+0

可能重複[在Python中爲shell命令轉義字符串](http://stackoverflow.com/questions/18116465/escape-a-string-for-shell-commands-in-python) – Barmar 2015-02-06 03:20:12

+0

@Barmar我正在使用paramiko將文本文件寫入另一臺機器。 – unice 2015-02-06 03:27:17

回答

3

你需要逃避猛砸使用引號:

("echo %s > /home/user/%s" % (simplejson.dumps(d), 'textfile')).replace('"', '\\"') 
1

既然你說你使用paramiko,直接寫入文件是完美的。編輯代碼以反映paramiko:

您可以在登錄到服務器後直接寫入文件,不需要傳入bash命令(這是一種黑客行爲)。 您將需要兩個try-catch's:一個用於在打開文件時捕獲任何錯誤,另一個用於捕獲文件中的任何寫入。如果您希望在這兩種情況下拋出異常,請移除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()