Pexpect nicht respektieren timeouts
pexpect funktioniert nicht mit time-outs.
import pexpect
import sys
import os
os.system("""git config --global user.name '#{git_name}'""")
os.system("""git config --global user.email '#{git_email}'""")
child = pexpect.spawn ('git clone https://github.com/davidmontgom/rtbopsConfig.git')
child.logfile = sys.stdout
child.expect ('Username:*')
child.sendline ('#{git_username}')
child.expect ('Pass*')
child.sendline ('#{git_password}')
child.expect(pexpect.EOF, timeout=420)
os.system('cd /home/ubuntu/workspace/rtbopsConfig; git checkout #{branch_name}')
Receiving objects: 16% (1751/10655), 19.36 MiB | 876 KiB/s KiB/s
Receiving objects: 16% (1751/10655), 20.64 MiB | 861 KiB/s
103.4.112.50
103.4.112.50 STDERR: Traceback (most recent call last):
103.4.112.50
103.4.112.50 File "/tmp/chef-script20121006-19825-5yog10", line 12, in <module>
103.4.112.50
103.4.112.50 child.expect(pexpect.EOF)
103.4.112.50
103.4.112.50 File "/usr/local/lib/python2.7/dist-packages/pexpect-2.4-py2.7.egg/pexpect.py", line 1316, in expect
103.4.112.50
103.4.112.50 return self.expect_list(compiled_pattern_list, timeout, searchwindowsize)
103.4.112.50
103.4.112.50 File "/usr/local/lib/python2.7/dist-packages/pexpect-2.4-py2.7.egg/pexpect.py", line 1330, in expect_list
103.4.112.50
103.4.112.50 return self.expect_loop(searcher_re(pattern_list), timeout, searchwindowsize)
103.4.112.50
103.4.112.50 File "/usr/local/lib/python2.7/dist-packages/pexpect-2.4-py2.7.egg/pexpect.py", line 1414, in expect_loop
103.4.112.50
103.4.112.50 raise TIMEOUT (str(e) + '\n' + str(self))
103.4.112.50
103.4.112.50 pexpect.TIMEOUT: Timeout exceeded in read_nonblocking().
103.4.112.50
103.4.112.50 <pexpect.spawn object at 0x7fbb24704750>
103.4.112.50
103.4.112.50 version: 2.4 ($Revision: 516 $)
103.4.112.50
103.4.112.50 command: /usr/bin/git
103.4.112.50
103.4.112.50 args: ['/usr/bin/git', 'clone', 'https://github.com/davidmontgom/rtbopsConfig.git']
103.4.112.50
103.4.112.50 searcher: searcher_re:
103.4.112.50
103.4.112.50 0: EOF
103.4.112.50
Receiving objects: 16% (1751/10655), 20.64 MiB | 861 KiB/s 873 KiB/s
103.4.112.50
Receiving objects: 16% (1751/10655), 20.64 MiB | 861 KiB/s 873 KiB/s
103.4.112.50
103.4.112.50 after: <class 'pexpect.TIMEOUT'>
Wie bekomme ich pexpect funktioniert?
- schauen Sie genau auf die Fehlermeldung: Ihre traceback ist aus
git clone
, nicht eingit pull
Du musst angemeldet sein, um einen Kommentar abzugeben.
pexpect wirft eine exception bei timeout (30 Sekunden Standardeinstellung). Wenn Sie nicht wollen, eine Ausnahme; die Angabe der pexpect.TIMEOUT als Muster für
.expect()
.In deinem Beispiel
git clone
produziert pexpect.Timeout-Ausnahme nach Standard-timeout auf.expect(pexpect.EOF)
. Versuchen:pexpect.run(cmd, logfile=sys.stdout)
Wie mache ich es nicht timeout? Ich habe versucht, das hinzufügen einer timeout=999 argument, aber das hat nicht funktioniert.timeout=git_clone_timeout
zu arbeiten, es sei denngit clone
produziert zu viel output. Sie könnten auch versuchen würde:timeout=1, events={TIMEOUT: every_second}
Es scheint wie eine gute separate Frage (create eine künstliche minimale code-Beispiel, das zeigt Ihr Problem).timeout=None
argument.pexpect.run(cmd, logfile=sys.stdout, timeout=None)
Einen anderen Weg zu lassen TIMEOUT Arbeit: