我有以下一段python 2.7代码:
import sys
from subprocess import Popen, PIPE
cmd = "curl -v http://172.23.85.34 2>&1"
p = Popen(cmd, shell=True, stderr=PIPE, stdout=PIPE)
ret = p.wait()
out, err = p.communicate()
sys.stdout.write("Command is:\n" + cmd + "\nOutput:\n" + out)
出于某种原因,我运行python脚本时得到的输出与我直接从bash运行curl -v http://172.23.85.34 2>&1
时获得的输出不同。这是什么原因?
Python输出:
Command is:
curl -v http://172.23.85.34 2>&1
Output:
* Rebuilt URL to: http://172.23.85.34/
* Trying 172.23.85.34...
* TCP_NODELAY set
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
0 0 0 0 0 0 0 0 --:--:-- --:--:-- --:--:-- 0* Connected to 172.23.85.34 (172.23.85.34) port 80 (#0)
> GET / HTTP/1.1
> Host: 172.23.85.34
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 23 Mar 2017 13:35:06 GMT
< Server: Apache/2.4.23 (Unix) OpenSSL/1.0.2g
< Upgrade: h2
< Connection: Upgrade
< Last-Modified: Tue, 20 Dec 2016 09:33:57 GMT
< ETag: "61-54413bc4fb12a"
< Accept-Ranges: bytes
< Content-Length: 97
< Content-Type: text/html
<
{ [97 bytes data]
* Curl_http_done: called premature == 0
100 97 100 97 0 0 5307 0 --:--:-- --:--:-- --:--:-- 5388
* Connection #0 to host 172.23.85.34 left intact
<html>
<body>
<h1>It works!</h1>
<img src="Helium.jpg" alt="Helium">
</body>
</html>
cURL输出:
$ curl -v http://172.23.85.34 2>&1
* Rebuilt URL to: http://172.23.85.34/
* Trying 172.23.85.34...
* TCP_NODELAY set
* Connected to 172.23.85.34 (172.23.85.34) port 80 (#0)
> GET / HTTP/1.1
> Host: 172.23.85.34
> User-Agent: curl/7.51.0
> Accept: */*
>
< HTTP/1.1 200 OK
< Date: Thu, 23 Mar 2017 13:37:01 GMT
< Server: Apache/2.4.23 (Unix) OpenSSL/1.0.2g
< Upgrade: h2
< Connection: Upgrade
< Last-Modified: Tue, 20 Dec 2016 09:33:57 GMT
< ETag: "61-54413bc4fb12a"
< Accept-Ranges: bytes
< Content-Length: 97
< Content-Type: text/html
<
<html>
<body>
<h1>It works!</h1>
<img src="Helium.jpg" alt="Helium">
</body>
</html>
* Curl_http_done: called premature == 0
* Connection #0 to host 172.23.85.34 left intact
答案 0 :(得分:1)
python脚本的输出中有value2.map(x => <tag2>{x}</tag>).getOrElse(NodeSeq.Empty)
个信息。
来自 man curl :
PROGRESS METER
简单地说curl默认会显示PROGRESS METER
curl normally displays a progress meter during operations, indicating the amount of transferred data, transfer speeds and estimated time left, etc.
curl displays this data to the terminal by default, so if you invoke curl to do an operation and it is about to write data to the terminal, it disables the progress
meter as otherwise it would mess up the output mixing progress meter and response data.
,但是如果输出是终端则禁用它,所以当你运行你的python脚本时,progress info
的输出不是终端,而是管道你的python进度,在输出中生成curl
。
您将使用选项progress info
获得相同的输出以禁用它:
-s