wget 的 stderr 在写入屏幕时与写入文件时看起来如此不同
where is stderr of wget look so different when writing to screen than to a file
例如,当使用 wget
$ wget https://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz
输出看起来像
--2016-03-05 20:01:58-- https://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz
Resolving pypi.python.org (pypi.python.org)... 199.27.74.223
Connecting to pypi.python.org (pypi.python.org)|199.27.74.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 544247 (531K) [application/octet-stream]
Saving to: ‘Flask-0.10.1.tar.gz’
100%[====================================================================================================================================================================================================>] 544,247 2.38MB/s in 0.2s
2016-03-05 20:01:59 (2.38 MB/s) - ‘Flask-0.10.1.tar.gz’ saved [544247/544247]
但是当我将它重定向到日志时
$ wget https://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz &> tmp.log
$ cat tmp.log
--2016-03-05 20:02:54-- https://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz
Resolving pypi.python.org (pypi.python.org)... 199.27.74.223
Connecting to pypi.python.org (pypi.python.org)|199.27.74.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 544247 (531K) [application/octet-stream]
Saving to: ‘Flask-0.10.1.tar.gz.3’
0K .......... .......... .......... .......... .......... 9% 443K 1s
50K .......... .......... .......... .......... .......... 18% 409K 1s
100K .......... .......... .......... .......... .......... 28% 433K 1s
150K .......... .......... .......... .......... .......... 37% 374K 1s
200K .......... .......... .......... .......... .......... 47% 374K 1s
250K .......... .......... .......... .......... .......... 56% 338K 1s
300K .......... .......... .......... .......... .......... 65% 337K 0s
350K .......... .......... .......... .......... .......... 75% 241K 0s
400K .......... .......... .......... .......... .......... 84% 346K 0s
450K .......... .......... .......... .......... .......... 94% 384K 0s
500K .......... .......... .......... . 100% 693K=1.4s
2016-03-05 20:02:55 (369 KB/s) - ‘Flask-0.10.1.tar.gz.3’ saved [544247/544247]
我很好奇,想知道写入屏幕时发生了什么?
这些等号的增量出现是如何成为可能的,以及在哪里
重定向到日志后它们消失了吗?
wget 在 stderr 上调用 isatty() 来决定是否显示增量等号下载进度条。这很方便,原因有很多,因为我们可以发送终端控制字符来备份和擦除该行并重写它。这是在写入文件时通过不同的机制完成的,而在写入管道时则不可能。
例如,当使用 wget
$ wget https://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz
输出看起来像
--2016-03-05 20:01:58-- https://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz
Resolving pypi.python.org (pypi.python.org)... 199.27.74.223
Connecting to pypi.python.org (pypi.python.org)|199.27.74.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 544247 (531K) [application/octet-stream]
Saving to: ‘Flask-0.10.1.tar.gz’
100%[====================================================================================================================================================================================================>] 544,247 2.38MB/s in 0.2s
2016-03-05 20:01:59 (2.38 MB/s) - ‘Flask-0.10.1.tar.gz’ saved [544247/544247]
但是当我将它重定向到日志时
$ wget https://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz &> tmp.log
$ cat tmp.log
--2016-03-05 20:02:54-- https://pypi.python.org/packages/source/F/Flask/Flask-0.10.1.tar.gz
Resolving pypi.python.org (pypi.python.org)... 199.27.74.223
Connecting to pypi.python.org (pypi.python.org)|199.27.74.223|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 544247 (531K) [application/octet-stream]
Saving to: ‘Flask-0.10.1.tar.gz.3’
0K .......... .......... .......... .......... .......... 9% 443K 1s
50K .......... .......... .......... .......... .......... 18% 409K 1s
100K .......... .......... .......... .......... .......... 28% 433K 1s
150K .......... .......... .......... .......... .......... 37% 374K 1s
200K .......... .......... .......... .......... .......... 47% 374K 1s
250K .......... .......... .......... .......... .......... 56% 338K 1s
300K .......... .......... .......... .......... .......... 65% 337K 0s
350K .......... .......... .......... .......... .......... 75% 241K 0s
400K .......... .......... .......... .......... .......... 84% 346K 0s
450K .......... .......... .......... .......... .......... 94% 384K 0s
500K .......... .......... .......... . 100% 693K=1.4s
2016-03-05 20:02:55 (369 KB/s) - ‘Flask-0.10.1.tar.gz.3’ saved [544247/544247]
我很好奇,想知道写入屏幕时发生了什么? 这些等号的增量出现是如何成为可能的,以及在哪里 重定向到日志后它们消失了吗?
wget 在 stderr 上调用 isatty() 来决定是否显示增量等号下载进度条。这很方便,原因有很多,因为我们可以发送终端控制字符来备份和擦除该行并重写它。这是在写入文件时通过不同的机制完成的,而在写入管道时则不可能。