【问题标题】:Formatting text from a subprocess.Popen command格式化来自 subprocess.Popen 命令的文本
【发布时间】:2013-06-29 14:02:53
【问题描述】:

我正在尝试运行一个子进程命令并希望格式化输出以仅显示 Unix 纪元时间戳和创建时间(最好将人类可读时间从 24 小时时间转换为 12 小时时间戳)。我已经在网上搜索了几个小时,但没有找到我要找的东西。 (子进程命令中的变量(pool, agent, 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

【问题讨论】:

  • 如果您可以在问题中添加一个以snap 变量结尾的原始文本格式示例,那将非常有帮助。
  • @martineau 这里是 snap 变量显示的内容:1370217684 Sun Jun 2 20:01 2013 1370822507 Sun Jun 9 20:01 2013
  • “2013”​​和“1370822507”之间应该是行分隔符。

标签: python subprocess output


【解决方案1】:

看来您需要遍历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-length组中。

【讨论】:

  • for stamp,,,_,snaptime = zip(*[iter(snap.split(' '))]*5): ^ SyntaxError: invalid syntax跨度>
  • 糟糕,是的。那个等号应该是in
  • 在将“=”更改为“in”后,它的工作原理更符合我的要求。唯一的是将年份打印在单独的行上
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-08-19
  • 1970-01-01
  • 2015-11-06
  • 2013-07-15
  • 2016-07-21
  • 1970-01-01
  • 2012-03-29
相关资源
最近更新 更多