在Python中搜索线条

问题描述:

我想将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更喜欢使用**库**,而不是**可执行文件**。 –

除非我误解了你的叙述,否则问题在于你重复字符串_test(在你没有显示的代码中)。这一次迭代一个字符。所以,你只需要编写

_test = _test.split("\n") 

_test成线的列表,当你迭代它,你会得到线,而不是单个字符。

+0

F我侧身,这很简单吗? O_o 我试过类似的东西,但用.strip()。我搜索“将字符串转换为列表”,甚至尝试过使用字典:D –

+0

是的,这是一个非常简单的事情:-) Python字符串处理功能非常强大,阅读它。还有'str.splitlines()',它将把连续的换行视为一个分隔符。 – alexis

+0

PS。请注意关于不能如此迅速地启动子流程的建议。用bash术语来说,你使用过程的很多东西都是Python中的“内置”(它们必须是平台独立的)。 – alexis