我是一个python新手,在这里我正在与一些概念做斗争-任何帮助都是非常感谢的。在
我有一个定制的系统工具,它查询数据库,并返回几行作为要读取的结果——每行一行。下面的python脚本接受来自原始输入的站点FQDN并在该FQDN上运行$path。在
#!/usr/bin/python
import subprocess
import getpass
#get the site name.
site = raw_input("What is the name of the site?: ").strip()
#run path.
cmd = 'path '+ site;
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE);
path_output = p.stdout.read().strip().split('\n')
print path_output
返回如下结果:
^{pr2}$我如何从“nfs=etc”中获取额外的空白,或者只获取第三列(aka awk'{print$3}')和/或从bash将这些结果的每一部分分配给单独的变量以进行进一步的操作?在
只是在学习过程中遇到了一些困难,我们衷心感谢您的帮助。在
第二个问题首先:你可以把结果收集到一个列表中,但是用字典更方便。在
第一个问题:由于您的结果都是以
key = value
的形式出现的,您可以这样提取它们:当像这样调用}周围的空白,并将它们存储在字典中。在
p.stdout
(或任何文本文件对象)时,它一次隐式地读取一行。下一个语句将等号上的行拆分,并将部分分配给两个变量。最后,我们去除key
和{你也可以用
line.split()
分割空白行,但是如果值或键(不太可能)包含一个嵌入的空格,你就会有问题。在第三列将是
line.split()[2]
;如果您想去掉前两个单词而使用其余的单词,则它是line.split(None, 2)[-1]
。(split
没有参数,或None
作为第一个参数,在任何空白处拆分。)说明:},然后循环那张单子很正常。这就像在做什么
^{pr2}$(l.split(None, 2) for l in path_output)
是一个生成器表达式,它对path_output
的每个值运行l.split(None, 2)
(称之为l
)。这就像一个列表理解,这是相同的事情,但它的周围是[]
,而不是()
,但它只在for
循环经过时运行l.split
调用,然后忽略前面的值,而列表理解将构造一个大列表,其中每个步骤的结果都是{但稍微短一点。:)
如果你想把它放到字典中,比如DSM suggests,你可以这样做(只是为了上下文)如下
或者,在python2.7/3中,更好的
当然,您可以在两行代码中使其更具可读性:
你是想要一个字典还是仅仅是一个循环,这取决于你要用它做什么处理,但是字典对于大多数事情来说可能是一个更好的方法。在
相关问题 更多 >
编程相关推荐