2011-12-07 34 views
0

可能重複:
Python module to shellquote/unshellquote?Python的 - 傳遞一個字符串作爲輸入一個命令

我想傳遞一個字符串的值變成命令輸入,Python中用於執行bash命令。我公司目前擁有的財產以後這樣的:?

cmd = 'echo ' + <StringValue> + ' | command' 
output = commands.getOutput(cmd) 

,但它不工作,因爲我的字符串值,還同時包含「和」,所以它解析他們錯了誰能告訴我怎樣才能通過這個

+0

你能與你正在嘗試做一個具體的例子補充你的榜樣和所產生的誤差消息?我可以在運行時獲得以下內容:'string_input =「bbbb'aaaa'」; commands.getoutput('echo%s; ls'%string_input)' – dtlussier

+0

使用'subprocess.call'並傳遞一個stdin參數幾乎可以肯定要比系統調用回聲跟一個管道要好 – geoffspear

回答

0

因爲Python 2.6 commands模塊目前已棄用,並在Python 3去除,你應該使用subprocess模塊來代替。

Python文檔中的replacing shell pipeline節應提供您所需要的信息。

編輯:作爲後續您的評論的問題,你可以使用下面的代碼字符串傳遞給你的進程:

import subprocess 

process = subprocess.Popen('cat', stdin=subprocess.PIPE) 
process.stdin.write('abc "def"') 
process.communicate() 

輸出,這將是ABC「高清」與報價爲你」重新尋找。

+0

回聲的問題如下:echo「abc」def「」 abc def。正如你所看到的那樣,「def的環繞聲已經從輸出。我會使用子進程,但我不想使用文件作爲標準輸入。我如何使用stdin並將它傳遞給一個字符串? – laviniap

+0

使用StringIO對象而不是真實文件。 – geoffspear

0

至於解析,你可以使用三引號有文字「和」在一個字符串:

>>> print """test "a" 'b'""" 
test "a" 'b' 
相關問題