2012-11-12 84 views
4

我是python和fabric api的新手。我正在嘗試使用sudo功能在bash終端中運行sed命令,該命令在找到特定的文本行後插入一些文本。我試圖插入到我正在修改的文件中的一些文本包含似乎被結構忽略或導致語法錯誤的反斜槓。我嘗試過「shell = true」和「shell = false」選項,但仍然沒有運氣。我怎樣才能避免反斜槓?看起來「shell = true」只能逃脫$和「。My Code below。Python fabric.api反斜槓地獄

sudo('sed -i」/ sometext/a textwith \ backslash「/home/me/somefile.txt',shell=True)

回答

5

嘗試前綴的字符串r,這意味着它會被解釋爲一個原始字符串:

sudo (r' sed -i "/sometext/a textwith\backslash" /home/me/somefile.txt',shell=True) 

對字符串和其他信息他們在Python用法請參見here

+1

嗨。感謝您的迴應。不幸的是,我仍然沒有任何運氣。雖然奇怪的是,如果我加上13個反斜槓,它就可以工作!?我會繼續玩...... – Hoani888

4

OK,終於解決了這個問題,RocketDonkey是相對的等。需要以「r」作爲前綴,但也需要設置「shell = False」。這使得在從fabric.api調用時,可以直接在bash終端中工作。

感謝RocketDonkey!

+1

太棒了!哈我在試圖弄清楚這筆交易是怎麼回事 - 完全忽略了外殼的一部分。智能捕捉你的角色 - +1! – RocketDonkey

+0

你不需要用r作爲前綴。只要設置'shell = False'爲我工作。 – trss