簡體   English   中英

python字符串中的單引號和雙引號

[英]single quotes and double quotes in python strings

我想調用python函數pexpect.spawn(cmd) ,其中cmd是如下字符串:

ssh -t kity@192.199.61.205 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"'

IP地址總是在變化,所以它是這樣的:

ssh -t kity@%s 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"' %host_ip

有幾個'" ,我不知道怎么處理它基本上,它是關於如何處理python字符串中的轉義,當有一個變量子串時,如何處理它

謝謝

您可以使用三引號:

"""ssh -t kity@{0} 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"'""".format(ip_address)

Cameron Sparr已經給出了通用答案。

但在您的具體情況下,您可能不需要這個。

pexpect.spawn接受命令和參數字符串命令字符串以及單獨的參數字符串列表。 對於其他庫中的大多數類似方法(例如標准庫subprocess模塊中的所有方法)也是如此。

因此,您只需要將每個參數設置為字符串,如下所示:

pexpect.spawn('ssh', ['-t', 'kity@192.199.61.205', 'sudo nohup bash -c "./tcp_sender > /dev/null 2>&1 &"'])

事實上,文檔特別建議這一點,正是出於這個原因:

生成的第二種形式(在其中傳遞參數列表)在希望產生命令並傳遞其自己的參數列表的情況下很有用。 這可以使語法更加清晰。

當然,根據您的情況,您實際上是在生成一個帶有參數列表的命令……其中之一本身就是一個生成的命令和一個參數列表( sudo ),依此類推幾步( nohupbash ,最后是tcp_sender ),顯然pexpect只能幫助完成這些步驟中的第一步。 幸運的是,在這種情況下,這就是您所需要的。

如果確實需要更多,有一些庫可以從參數列表中生成POSIX風格的帶引號的字符串(基本上是shlex ),但是我幾次需要一個,后來發現這是越野車,我最終自己重寫了它……實際上並沒有那么復雜(基本上,先逃避所有內容,然后引用所有參數)。 但希望您永遠不必這樣做。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM