2017-04-25 79 views
1

我想在python中運行bash表達式,但在轉義序列中確實卡住了。去除python中bash腳本的反斜槓轉義

擊表達:

grep 'NODE_FW' /etc/config/node.py | cut -d ',' -f2,3 | tr ',' '.' | tr -d \'\" 

Python的錯誤:

>>>> cmd = 'grep \'NODE_FW\' /etc/config/node.py | cut -d \',' -f2,3 | tr ',' '.' | tr -d \'\" 
    File "<stdin>", line 1 
    cmd = 'grep \'NODE_FW\' /etc/config/node.py | cut -d \',' -f2,3 | tr ',' '.' | tr -d \'\" 
                         ^
SyntaxError: Unknown character 

r'\'使用和'\\'但沒有運氣試過。 已經檢查了幾乎所有可通過網絡訪問的鏈接。另外,請不要建議第三方模塊。請任何幫助!

+0

錯字:你用簡單的報價打開字符串,用雙引號結束。 –

+0

嘗試以引號結尾:'... tr -d \'\「'''或者更好:使用雙引號將避免所有參數中的單引號轉義 –

+1

嘗試:'cmd =」grep'NODE_FW '/etc/config/node.py | cut -d','-f2,3 | tr',''。' | tr -d \'\「」' –

回答

3

使用使用r"..."raw字符串:

>>> cmd = r"grep 'NODE_FW' /etc/config/node.py | cut -d ',' -f2,3 | tr ',' '.' | tr -d \'\"" 
>>> print cmd 
grep 'NODE_FW' /etc/config/node.py | cut -d ',' -f2,3 | tr ',' '.' | tr -d \'\" 
+1

也使用雙引號可避免轉義單引號(因爲它們不包含空格,因此大多數命令不需要BTW。 –

+0

@anubhava是的,它的確行得通,但是,我想知道是否這樣適用於你以原始字符串輸入的任何表達式,因爲對於''grep'NODE_FW'/etc/config/node.py | cut -d','-f2,3 | tr',''。'| tr -d ''> var && for i in $ var; do echo 10. $ i.1; done' failed。 –

+0

在附加的代碼中,沒有雙引號,它只是重定向到一個文件,然後連接一個字符串在bin/sh:-c:line中查找匹配的''''意外EOF '/ bin/sh:-c:line 0: 1:語法錯誤:意外的文件結尾' –