如何让预期输入 "y" 以响应输入提示
How to get pexpect to enter "y" in response to input prompt
我有一个命令行程序,我 运行 期望它输出以下行:
♂️ Would you like to continue? [y/n]:
然后挂起等待输入。
我想使用 pexpect 输入“y”并让程序继续。
我试过了
pexpect.run("[COMMAND]", events={"[y/n]: ": "y"})
以及要捕获的字符串的各种组合,包括\[y/n\]
,以及要输入的字符串的各种组合,包括y\n
.
它似乎不起作用,因为程序没有继续,但我没有看到错误消息,因为它被 pexpect 抑制了,我想。
我不确定这是否有所不同,但光标在冒号后 space 处开始。
我怎样才能让它工作?
编辑:
使用答案建议的代码,我可以看到错误输出:
child = pexpect.spawn('command')
child.expect('[y/n]:')
child.sendline('y')
我收到了 pexpect.exceptions.TIMEOUT: Timeout exceeded.
,因为看起来正则表达式无法匹配。
buffer (last 100 chars): b'rty-1643399100\r\n\x1b[0m\xf0\x9f\x93\x8c Would you like to continue? [y/n]:\x1b[0m '
before (last 100 chars): b'rty-1643399100\r\n\x1b[0m\xf0\x9f\x93\x8c Would you like to continue? [y/n]:\x1b[0m '
after: <class 'pexpect.exceptions.TIMEOUT'>
match: None
match_index: None
exitstatus: None
flag_eof: False
pid: 43897
child_fd: 7
closed: False
timeout: 30
delimiter: <class 'pexpect.exceptions.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
searcher: searcher_re:
0: re.compile(b'[y/n]:')
这帮助我排除故障并弄清楚我需要 \[y/n\]:
。谢谢!
你试过了吗pexpect.run("[COMMAND]", events={"[y/n]: " : "y\n"})
?根据文档并根据您的程序,可能需要换行符。
或者,为了更通用和节省,使用
import pexpect
child = pexpect.spawn ('command')
child.expect ('[y/n]: ')
child.sendline ('y')
我有一个命令行程序,我 运行 期望它输出以下行:
♂️ Would you like to continue? [y/n]:
然后挂起等待输入。
我想使用 pexpect 输入“y”并让程序继续。
我试过了
pexpect.run("[COMMAND]", events={"[y/n]: ": "y"})
以及要捕获的字符串的各种组合,包括\[y/n\]
,以及要输入的字符串的各种组合,包括y\n
.
它似乎不起作用,因为程序没有继续,但我没有看到错误消息,因为它被 pexpect 抑制了,我想。
我不确定这是否有所不同,但光标在冒号后 space 处开始。
我怎样才能让它工作?
编辑:
使用答案建议的代码,我可以看到错误输出:
child = pexpect.spawn('command')
child.expect('[y/n]:')
child.sendline('y')
我收到了 pexpect.exceptions.TIMEOUT: Timeout exceeded.
,因为看起来正则表达式无法匹配。
buffer (last 100 chars): b'rty-1643399100\r\n\x1b[0m\xf0\x9f\x93\x8c Would you like to continue? [y/n]:\x1b[0m '
before (last 100 chars): b'rty-1643399100\r\n\x1b[0m\xf0\x9f\x93\x8c Would you like to continue? [y/n]:\x1b[0m '
after: <class 'pexpect.exceptions.TIMEOUT'>
match: None
match_index: None
exitstatus: None
flag_eof: False
pid: 43897
child_fd: 7
closed: False
timeout: 30
delimiter: <class 'pexpect.exceptions.EOF'>
logfile: None
logfile_read: None
logfile_send: None
maxread: 2000
ignorecase: False
searchwindowsize: None
delaybeforesend: 0.05
delayafterclose: 0.1
delayafterterminate: 0.1
searcher: searcher_re:
0: re.compile(b'[y/n]:')
这帮助我排除故障并弄清楚我需要 \[y/n\]:
。谢谢!
你试过了吗pexpect.run("[COMMAND]", events={"[y/n]: " : "y\n"})
?根据文档并根据您的程序,可能需要换行符。
或者,为了更通用和节省,使用
import pexpect
child = pexpect.spawn ('command')
child.expect ('[y/n]: ')
child.sendline ('y')