1

次のような pexpect.expect への呼び出しがあるとしましょう:

ret = pex.expect([re.escape(line), pexpect.EOF, pexpect.TIMEOUT], timeout)
if ret == 0:
    do_stuff()
elif ret == 1:
    do_eof_stuff()
elif ret == 2:
    do_timeout_stuff()

関心のある行に一致させる代わりに、EOF と TIMEOUT の処理に加えて、物事を切り替えて、その行以外のものに一致させたいと考えています。このような並べ替え:

ret = pex.expect([not re.escape(line), pexpect.EOF, pexpect.TIMEOUT], timeout)
if ret == 0:
    do_error_stuff()
elif ret == 1:
    do_eof_stuff()
elif ret == 2:
    do_timeout_stuff()
else:
   # Our line "matched" so do stuff
   do_stuff()

「not re.escape(line)」が有効でないことはわかっています。これは、私が望むものを示すための単なる方法です。その代わりに実際に何を使用しますか?

4

1 に答える 1

1

私はネガティブな先読みを使ってこれをいじくり回しました:

ret = pex.expect([r'^((?!' + re.escape(line) + ').)*$', pexpect.EOF, pexpect.TIMEOUT], timeout)

ここでの注意点はhello world、たとえば行が次の場合です。

hello world -> won't match
hello world 2 -> won't match
my hello world -> won't match
hello worl -> will match

それがどれほど具体的に必要かわからない。

于 2013-03-07T19:31:39.767 に答える