4

我有一個參數列表,例如["hello", "bobbity bob", "bye"]。我將如何格式化它們,以便它們可以正確地傳遞給shell?如何從python中的參數列表格式化shell命令行

錯誤

>>> " ".join(args) 
hello bobbity bob bye 

正確

>>> magic(args) 
hello "bobbity bob" bye 
+0

你需要處理的情況下,當一些參數可能包含引號「''‘?S或反斜槓'\'’ S 2 – SingleNegationElimination

+0

@TokenMacGuy:?!是啊..我基本上要究竟如何,將通過'popen'通過,但作爲一個命令行 – Claudiu

回答

12

您可以使用無證但長時間穩定(至少since Oct 2004subprocess.list2cmdline

In [26]: import subprocess 
In [34]: args=["hello", "bobbity bob", "bye"] 

In [36]: subprocess.list2cmdline(args) 
Out[36]: 'hello "bobbity bob" bye' 
+0

啊完美..究竟是什麼 我想了。我想知道爲什麼它沒有記錄 – Claudiu

+0

+1,你已經打動了我的心! – SingleNegationElimination

0

有什麼不好的老派做法:

>>> args = ["hello", "bobbity bob", "bye"] 
>>> s = "" 
>>> for x in args: 
...  s += "'" + x + "' " 
... 
>>> s = s[:-1] 
>>> print s 
'hello' 'bobbity bob' 'bye' 

這不要緊,如果單字引用被引用脹。

+0

什麼地方錯了,有一種更好的方式= P – Claudiu

+0

Works的這些參數,但可以導致問題(包括安全問題),如果參數可能包含單引號。 – Stef

1

爲您解決問題的更簡單的方法是添加\「... \」時,您的文字至少有兩個詞。
因此,要做到這一點:

# 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)