如何让预期输入 "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')