/ / Python pexpect: var.expect ('cadena') no devuelve los valores esperados cuando no se encuentra 'cadena' - python, python-2.7, pexpect

Python pexpect: var.expect ('cadena') no devuelve los valores esperados cuando no se encuentra 'cadena' - python, python-2.7, pexpect

Estoy trabajando con el siguiente bit de código Python. El código es bastante simple, pexpect envía. echo testcase al terminal, luego monitorea el terminal para la posterior aparición de testcase, luego verifica que vio el eco configurando bool_value=True (Suponiendo que vea la salida esperada).

#!/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()

Lo que espero ver es que después del primer caso de prueba, se imprimirá bool_value True. En este caso, sí, pero solo después de agregar el extraño truco de configuración bool_value = not testcase.expect("testcase") (configurándolo a la inversa de lo que espera () devuelve).

En el segundo caso de prueba, testcase.expect() no ve el valor esperado de someothervalue, así que espero que vuelva false. En su lugar, devuelve una excepción:

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

Realmente no estoy seguro de cómo corregir este comportamiento en función de lo que me dice la documentación. testcase.expect(pexpect.EOF()) por esta implementación previa devuelve el mismo error.

¿Cómo implemento correctamente esta función?

Respuestas

0 para la respuesta № 1

Resulta que cuando el sistema no estaba emitiendo algo pexpect estaba buscando, golpearía pexpect.EOF Sin desencadenar ningún tipo de acción. Debido a que no le digo qué hacer cuando golpea EOF sin ver las otras cadenas que está esperando, en su lugar devuelve una excepción.

Aquí está mi código con correcciones y casos de prueba.

#!/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()