格式化subprocess.Popen命令中的文本

时间:2013-06-29 14:02:53

标签: python subprocess output

我正在尝试运行子进程命令,并希望将输出格式化为仅显示Unix纪元时间戳和创建时间(最好将人类可读时间从24小时时间转换为12小时时间戳)。我一直在网上搜索几个小时,但没有找到我要找的东西。 (子进程命令中的变量(池,代理,rmpool)与问题无关)

epoch = subprocess.Popen("zfs list -t snapshot -r " + pool + agent +
                         " -o name,creation | " + rmpool + " | grep -v NAME",
                         stdout=subprocess.PIPE, shell=True)
snap, err = epoch.communicate()
snap = str(snap)
snap = snap.split(' ')
stamp = snap[0]
snaptime = snap[4]
print "\nEpoch\t\tTime"
print stamp, '\t', snaptime

它只返回

  

大纪元时间

     

1370217684 20:01

我需要它回复:

  

大纪元时间

     

1370217684 20:01

     

1370822507 20:01

     

1371427274 20:01

     

1371859278 20:01

     

1371945679 20:01

     

1372032076 20:01

     

1372118478 20:01

     

1372204879 20:01

     

1372291282 20:01

1 个答案:

答案 0 :(得分:0)

看起来您需要遍历snap.split(' ')中的所有值:

snap, err = epoch.communicate()
print "\nEpoch\t\tTime"
for stamp,_,_,_,snaptime,_ in zip(*[iter(snap.split(' '))]*6):
    print('{}\t{}'.format(stamp, snaptime))

以上内容使用zip(*[iter(s)]*n) grouper idiom将数据聚合为n个长度组。