2017-03-08 83 views
-4

我想將Bash腳本轉換爲Python進行培訓。在bash腳本通過ssh查詢其DF遠程主機和搜索特定的字段返回的行,像這樣:在Python中搜索線條

ssh $_host df 2>/dev/null | grep -i $_filesystem | grep : 

在Python中,我結合使用subprocess.callshlex.split獲得「DF」輸出:

_cmd = shlex.split("ssh %s df 2>/dev/null" % _host) 
_test = subprocess.check_output(_cmd) 

這裏,_test收益類型字符串,如果我想搜索這行線,它打印出的每個字符作爲新行。 subprocess.Popen對於管道也不起作用。我想要做的就是打印出找到我的搜索字符串的行,以便進一步格式化。

我已經看到了幾個接近解決方案的嘗試,但其中大多數嘗試通過具有已定義的回車符的文件進行迭代,而不是通過子進程調用返回的字符串。

+3

Bash是一個特定領域的語言,專門設計用於與進程交互。 Python是一種能夠做任何事情的通用語言。我希望看到你在shell腳本中編寫一個web服務器。 –

+0

感謝您澄清,儘管它根本沒有幫助。 –

+1

「正確」的做法是導入可以處理'ssh'的東西。我推薦'fabric'(google:「python fabric」)。目前你只是從python調用ssh可執行文件,而不是如何做(通常)。鑑於你在bash中的背景是可以理解的,但不像bash python更喜歡使用**庫**,而不是**可執行文件**。 –

回答

0

除非我誤解了你的敘述,否則問題在於你重複字符串_test(在你沒有顯示的代碼中)。這一次迭代一個字符。所以,你只需要編寫

_test = _test.split("\n") 

_test成線的列表,當你迭代它,你會得到線,而不是單個字符。

+0

F我側身,這很簡單嗎? O_o 我試過類似的東西,但用.strip()。我搜索「將字符串轉換爲列表」,甚至嘗試過使用字典:D –

+0

是的,這是一個非常簡單的事情:-) Python字符串處理功能非常強大,閱讀它。還有'str.splitlines()',它將把連續的換行視爲一個分隔符。 – alexis

+0

PS。請注意關於不能如此迅速地啓動子流程的建議。用bash術語來說,你使用過程的很多東西都是Python中的「內置」(它們必須是平臺獨立的)。 – alexis