[英]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
),依此類推幾步( nohup
, bash
,最后是tcp_sender
),顯然pexpect
只能幫助完成這些步驟中的第一步。 幸運的是,在這種情況下,這就是您所需要的。
如果確實需要更多,有一些庫可以從參數列表中生成POSIX風格的帶引號的字符串(基本上是shlex
),但是我幾次需要一個,后來發現這是越野車,我最終自己重寫了它……實際上並沒有那么復雜(基本上,先逃避所有內容,然后引用所有參數)。 但希望您永遠不必這樣做。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.