【问题标题】:Writing console output to a file in python将控制台输出写入python中的文件
【发布时间】:2012-11-02 14:20:53
【问题描述】:

对不起这个问题,我知道这是一个反复出现的话题,但我无法解决我的问题,事实上,这很容易描述:我想将执行的输出写入文件 原样。我的意思是,我有这样的输出(对不起,一团糟):

.251.242.133|:80... connected.\r\nHTTP request sent, awaiting response... 200 OK\r\nLength: 2371567 (2.3M) [application/x-gzip]\r\nSaving to: `110907_ERP000591.tar.gz\'\r\n\r\n\r 0% [                                       ] 0           --.-K/s              \r 0% [                                       ] 23,003       104K/s              \r 3% [>                                      ] 82,863       184K/s              \r 8% [==>                                    ] 192,363      282K/s              \r15% [=====>                                 ] 371,943      411K/s              \r26% [=========>                             ] 634,175      563K/s              \r39% [==============>                        ] 925,283      680K/s              \r52% [===================>                   ] 1,250,295    790K/s              \r63% [=======================>               ] 1,497,035    830K/s              \r73% [===========================>           ] 1,732,663    861K/s              \r81% [==============================>        ] 1,937,063    867K/s              \r88% [=================================>     ] 2,099,123    855K/s              \r95% [====================================>  ] 2,268,483    847K/s              \r100%[======================================>] 2,371,567    849K/s   in 2.7s    \r\n\r\n2012-11-01 15:34:10 (849 KB/s) - `110907_ERP000591.tar.gz\' saved [2371567/2371567]\r\n\r\n110907_ERP000591/\r\n110907_ERP000591/1_110907_ERP000591_2_fastq.txt\r\n110907_ERP000591/1_110907_ERP000591_1_fastq.txt\r\n/home/travis/opt/bcbb/nextgen/tests/data/automated/../100326_FC6107FAAXX\r\n--2012-11-01 15:34:10--  http://chapmanb.s3.amazonaws.com/100326_FC6107FAAXX.tar.gz\r\nResolving chapmanb.s3.amazonaws.com (chapmanb.s3.amazonaws.com)... 205.251.242.133\r\nConnecting to chapmanb.s3.amazonaws.com (chapmanb.s3.amazonaws.com)|205.251.242.133|:80... connected.\r\nHTTP request sent, awaiting response... 200 OK\r\nLength: 7014592 (6.7M) [application/x-gzip]\r\nSaving to: `100326_FC6107FAAXX.tar.gz\'\r\n\r\n\r 0% [                                       ] 0           --.-K/s              \r 0% [                                       ] 17,163      77.9K/s              \r 0% [                                       ] 64,775       147K/s              \r 2% [                                       ] 174,843      263K/s              \r 5% [=>                                     ] 399,683      456K/s              \r12% [===>                                   ] 866,883      790K/s              \r25% [========>                              ] 1,798,363   1.33M/s              \r45% [================>                      ] 3,178,955   1.90M/s              \r65% [========================>              ] 4,592,803   2.41M/s              \r65% [========================>              ] 4,629,303   2.17M/s              \r67% [=========================>             ] 4,761,595   2.02M/s              \r74% [============================>          ] 5,245,423   2.03M/s              \r83% [===============================>       ] 5,862,435   2.08M/s              \r100%[======================================>] 7,014,592   2.46M/s   in 2.7s    \r\n\r\n2012-11-01 15:34:13 (2.46 MB/s) - 

所以,如您所见,我有一个格式奇怪的输出,在终端中显示如下:


/home/travis/opt/bcbb/nextgen/tests/data/automated/../100326_FC6107FAAXX
--2012-11-01 15:34:10--  http://chapmanb.s3.amazonaws.com/100326_FC6107FAAXX.tar.gz
Resolving chapmanb.s3.amazonaws.com (chapmanb.s3.amazonaws.com)... 205.251.242.133
Connecting to chapmanb.s3.amazonaws.com (chapmanb.s3.amazonaws.com)|205.251.242.133|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 7014592 (6.7M) [application/x-gzip]
Saving to: `100326_FC6107FAAXX.tar.gz'

100%[======================================>] 7,014,592   2.46M/s   in 2.7s    

2012-11-01 15:34:13 (2.46 MB/s) - `100326_FC6107FAAXX.tar.gz' saved [7014592/7014592]

好多了...我想用这种形式将输出写入文件,所以我不能只去掉 \r\n 或类似的东西,因为这种方式会在每一步出现一行下载。我只想写一个带有最终输出的文件。

有什么帮助吗?

编辑:

对不起,我应该更清楚一点:这不是命令的结果,而是如下所述的解析 json 文件的结果。您可以重现输出:


import urllib
import json

string_to_write = json.loads(urllib.urlopen('https://travis-ci.org/jobs/3019024.json').read())['log']

【问题讨论】:

  • 导致此输出的命令到底是什么?
  • 这应该基本上可以正常工作。意思是,如果你在 Python 中得到一个字符串 s = 'foo\n\rbar',并将它写到一个带有 open('outfile.txt, 'w').write(s) 的文件中,那么该文件应该包含这些行尾并在 cated 时正确呈现。
  • 虽然如果你在 Windows 上,在写入文件时,“二进制模式”和“文本模式”之间有一个脑残的区别。所以你可能需要使用'wb''w' 模式,不确定。请参阅 Python docs about reading and writing files 中的 cmets。
  • 对不起,其实不是命令本身,是解析[travis-ci api](www.travis-ci.org)返回的结果,具体来说就是字段['matrix' ][0]['id'] 来自this url返回的json
  • 这看起来像wget 输出,假定为 TTY。也许您应该改用--progress=dot 开关?

标签: python regex formatting output


【解决方案1】:

这应该可以工作:

re.sub(r"(?m)^.*\r(?!$)", "", text)

(?m) 标志表明这是一个多行正则表达式,因此 ^$ 匹配每行的开头和结尾,而不是整个文本。

所以,我们匹配所有 .* 从行首 ^ 直到并包括回车符 \r,除非回车符紧跟在行尾 (?!$) 之后 - 因为它将是如果您的文本包含 CRLF 换行符。并且,将匹配项替换为空字符串。

【讨论】:

  • 我有 '\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\n\ n\n\n\n2012-11-01 15:34:13 (2.46 MB/s) ' 真的是好结果吗?
【解决方案2】:

看起来您使用的是 *NIX 系统。如果此输出是通过在命令行上运行 progn(实际上可能是 python myscript.py)生成的,您可以很容易地做到这一点:

progn > logfile

这样,progn 的输出将保存到logfile,而不会剥离任何字符。

【讨论】:

    【解决方案3】:

    如果你只想删除隐藏在终端上的内容,那么你可以试试这个 ->

    # t is your text
    ''.join([i for i in t.split('\r') if i.startswith('\n') or i.startswith('100%')])
    

    解决方案很棘手(!),但我认为它可能对您有用。

    【讨论】:

      猜你喜欢
      • 2012-12-18
      • 2017-09-30
      • 1970-01-01
      • 1970-01-01
      • 2020-04-10
      • 1970-01-01
      • 2011-09-26
      相关资源
      最近更新 更多