/ / Python pexpect: var.expect ('string') ne renvoie pas les valeurs attendues lorsque 'string' est introuvable - python, python-2.7, pexpect

Python pexpect: var.expect ('string') ne renvoie pas les valeurs attendues lorsque 'string' est introuvable - python, python-2.7, pexpect

Je travaille avec le bit suivant de code Python. Le code est assez simple, envoie pexpect echo testcase au terminal, puis surveille le terminal pour l’apparition ultérieure de testcase, puis vérifie qu'il a vu l'écho en définissant bool_value=True (en supposant qu'il voit la sortie attendue).

#!/usr/bin/python
import pexpect

print("Testing case where pexpect finds the expected value: ")
testcase = pexpect.spawn("echo testcase")
bool_value = not testcase.expect("testcase")
print bool_value
testcase.close()

print("Testing case where pexpect does not find the expected value: ")
testcase = pexpect.spawn("echo testcase")
bool_value = not testcase.expect("someothervalue")
print bool_value
testcase.close()

Ce que je compte voir, c’est qu’après le premier test, bool_value s’imprimerait True. Dans ce cas, c’est le cas, mais seulement après avoir ajouté le hack étrange bool_value = not testcase.expect("testcase") (le mettre à l'inverse de ce que expect () renvoie).

Dans le second cas de test, testcase.expect() ne voit pas la valeur attendue de someothervalue, donc je m'attendrais à ce qu'il revienne false. Au lieu de cela, il renvoie une exception:

Traceback (most recent call last):
File "./echotest.py", line 12, in <module>
bool_value = not testcase.expect("someothervalue")
File "/usr/lib/python2.7/dist-packages/pexpect/__init__.py", line 1418, in expect
timeout, searchwindowsize)
File "/usr/lib/python2.7/dist-packages/pexpect/__init__.py", line 1433, in expect_list
timeout, searchwindowsize)
File "/usr/lib/python2.7/dist-packages/pexpect/__init__.py", line 1521, in expect_loop
raise EOF(str(err) + "n" + str(self))
pexpect.EOF: End Of File (EOF). Exception style platform.
<pexpect.spawn object at 0x7f7667a9db10>
version: 3.1
command: /bin/echo
args: ["/bin/echo", "testcase"]
searcher: <pexpect.searcher_re object at 0x7f7667a9d790>
buffer (last 100 chars): ""
before (last 100 chars): "testcasern"
after: <class "pexpect.EOF">
match: None
match_index: None
exitstatus: 0
flag_eof: True
pid: 4619
child_fd: 3
closed: False
timeout: 30
delimiter: <class "pexpect.EOF">
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1

"Je ne suis vraiment pas sûr de savoir comment corriger ce problème en fonction de ce que me dit la documentation. testcase.expect(pexpect.EOF()) par cette mise en œuvre précédente renvoie la même erreur.

Comment implémenter correctement cette fonction?

Réponses:

0 pour la réponse № 1

Il se trouve que lorsque le système ne produisait pas quelque chose pexpect cherchait, ça frapperait pexpect.EOF sans déclencher aucune sorte d'action. Parce que je ne lui dis pas quoi faire quand il frappe EOF sans voir les autres chaînes attendues, il renvoie une exception à la place.

Voici mon code avec corrections et cas de test.

#!/usr/bin/python
import pexpect

"""
Test for some known good value.
"""
print("Testing case where pexpect finds the expected value: ")
testcase = pexpect.spawn("echo testcase")
bool_value = testcase.expect([pexpect.EOF,"testcase","badcase"])
if bool_value == 0:
print("Unknown value presented to script.")
elif bool_value == 1:
print("Success.")
elif bool_value == 2:
print("Failed.")
print bool_value
testcase.close()

"""
Test for some known bad response
"""
print("Testing case where pexpect finds an expected bad value: ")
testcase = pexpect.spawn("echo badcase")
bool_value = testcase.expect([pexpect.EOF,"testcase","badcase"])
if bool_value == 0:
print("Unknown value presented to script.")
elif bool_value == 1:
print("Success.")
elif bool_value == 2:
print("Failed.")
print bool_value
testcase.close()

"""
If it gets no expected response at all, it will reach EOF. We have to define
some behavior for that case.
"""
print("Testing case where pexpect does not find any expected value: ")
testcase = pexpect.spawn("echo unknown")
bool_value = testcase.expect([pexpect.EOF,"testcase","badcase"])
if bool_value == 0:
print("Unknown value presented to script.")
elif bool_value == 1:
print("Success.")
elif bool_value == 2:
print("Failed.")
print bool_value
testcase.close()