2017-08-20 5 views
0

Ich erhalte eine Curl-Ausgabe nach dem Laichen zu einer Remote-Maschine. Die expect-Funktion hat immer ein Zeitlimit, ich habe verschiedene Muster ausprobiert, immer noch kein Glück. Der Curl Anfrage ist von der Form,python pexpect fehlgeschlagen für curl output

hdl2.sendline("curl -v http://{0}/index.html -o /dev/null".format(host1)) 

Der Ausgang empfangene

" > GET /index.html HTTP/1.1 
> User-Agent: curl/7.35.0 
> Host: 13.126.208.1 
> Accept: */* 

< HTTP/1.1 200 OK 
< Date: Sun, 20 Aug 2017 12:32:54 GMT 
* Server Apache/2.4.7 (Ubuntu) is not blacklisted 
< Server: Apache/2.4.7 (Ubuntu) 
< Last-Modified: Sun, 20 Aug 2017 09:56:44 GMT 
< ETag: "2cf6-5572c61363668" 
< Accept-Ranges: bytes 
< Content-Length: 11510 
< Vary: Accept-Encoding 
< Content-Type: text/html 
< 
{ [data not shown] 
100 11510 100 11510 0  0 3055k  0 --:--:-- --:--:-- --:--:-- 3746k 
* Connection #0 to host 13.126.208.1 left intact 
[email protected]:~$ " 

Dies ist das Ende Ausgang erwarte ich, dass gegeben haben als

hdl2.expect("\$ ") 

Aber jedes Mal, wenn ich pexpect bekommen Auszeit. Irgendwelche Vorschläge werden geschätzt.

Antwort

1

Dies kann aufgrund der Zeilenpufferung passieren: [email protected]:~$ ist nicht mit \n abgeschlossen, daher kann except diese Zeile nicht berücksichtigen. Sie können dies versuchen:

hdl2.sendline("curl -v http://{0}/index.html -o /dev/null; echo DONE".format(host1)) 
hdl2.expect("DONE") 

(Verwenden Sie eine Zeichenfolge, die für Ihre Daten statt DONE einzigartig sein wird.)

1

Pexpect der Standard-Timeout 30 Sekunden. Wenn Ihr Curl-Befehl mehr Zeit benötigt, müssen Sie den Timeout-Wert erhöhen. Zum Beispiel:

hdl2.expect("\$ ", timeout=600)