我有一個參數列表,例如["hello", "bobbity bob", "bye"]
。我將如何格式化它們,以便它們可以正確地傳遞給shell?如何從python中的參數列表格式化shell命令行
錯誤:
>>> " ".join(args)
hello bobbity bob bye
正確:
>>> magic(args)
hello "bobbity bob" bye
我有一個參數列表,例如["hello", "bobbity bob", "bye"]
。我將如何格式化它們,以便它們可以正確地傳遞給shell?如何從python中的參數列表格式化shell命令行
錯誤:
>>> " ".join(args)
hello bobbity bob bye
正確:
>>> magic(args)
hello "bobbity bob" bye
您可以使用無證但長時間穩定(至少since Oct 2004)subprocess.list2cmdline
:
In [26]: import subprocess
In [34]: args=["hello", "bobbity bob", "bye"]
In [36]: subprocess.list2cmdline(args)
Out[36]: 'hello "bobbity bob" bye'
啊完美..究竟是什麼 我想了。我想知道爲什麼它沒有記錄 – Claudiu
+1,你已經打動了我的心! – SingleNegationElimination
爲您解決問題的更簡單的方法是添加\「... \」時,您的文字至少有兩個詞。
因此,要做到這一點:
# Update the list
for str in args:
if len(str.split(" ")) > 2:
# Update the element within the list by
# Adding at the beginning and at the end \"
...
# Print args
" ".join(args)
如果你實際發送的值,以一個shell腳本,subprocess.popen
爲您處理此:
http://docs.python.org/library/subprocess.html?highlight=popen#subprocess.Popen
否則,我相信你下來進行字符串操作。 shlex.split
與你想要的相反,但似乎沒有反過來。
+1絕對是正確的路要走 –
你需要處理的情況下,當一些參數可能包含引號「''‘?S或反斜槓'\'’ S 2 – SingleNegationElimination
@TokenMacGuy:?!是啊..我基本上要究竟如何,將通過'popen'通過,但作爲一個命令行 – Claudiu