Python 在pexpect中在交互和非交互模式之间切换

Python 在pexpect中在交互和非交互模式之间切换,python,subprocess,sftp,pexpect,Python,Subprocess,Sftp,Pexpect,我正在使用pexpect将文件上载到SFTP服务器。对于第一次访问服务器,我收到的消息如下 无法建立主机..的真实性。是否确实要继续连接(是/否)? 我希望用户与之交互并回答是/否。但是,当用户说是时,我希望交互模式关闭,然后从我的脚本中获取密码,而不是提示用户。使用pexpect是否可以实现这一点 p = spawn('XXXXXXXX') password = 'XXXXXXXXx' out=p.expect(['(?i)password:', '(?i)Are you sure you w

我正在使用pexpect将文件上载到SFTP服务器。对于第一次访问服务器,我收到的消息如下
无法建立主机..的真实性。是否确实要继续连接(是/否)?

我希望用户与之交互并回答是/否。但是,当用户说是时,我希望交互模式关闭,然后从我的脚本中获取密码,而不是提示用户。使用pexpect是否可以实现这一点

p = spawn('XXXXXXXX')
password = 'XXXXXXXXx'
out=p.expect(['(?i)password:', '(?i)Are you sure you want to continue connecting (yes/no)?']

if out == 1:
   p.interact()
   
# Script should continue to send password and upload file
但这会进入交互模式,不会回到脚本

请。注意-我在终端中运行这个python脚本

如果不符合预期,请提出一个非基于paramiko、PySTFP的解决方案,检查:

交互(转义字符='\x1d',输入过滤器=无,输出过滤器=无)[source]

这使交互用户(键盘上的人)可以控制子进程。击键被发送到子进程,并打印子进程的stdout和stderr输出。这只是将子stdout和子stderr回显到真正的stdout,并将真正的stdin回显到子stdin。当用户键入转义字符时,此方法将返回None

您可以将转义字符传递给
p.interact()
,之后将禁用点交互模式。如果用户需要键入的全部内容是
yes
,则可以将转义字符设置为
a
(或“是”或“否”中未出现的其他字母),如下所示:

p.interact('a')

我想将文件上载到我的SFTP服务器。但是,我不允许使用paramiko/pysftp。可以只使用纯python或pexpectIt,这是用户应该验证的要求。另外,添加到“已知的主机”对我来说是可行的,但如果其他人在他们的机器上运行此脚本,他们最好验证我的脚本中是否包含所有这些预期代码,仅此而已!!谢谢你的回答。我确实尝试过这种方法,但是我在以下方面遇到了困难。如果用户按下“是”和转义字符(我暂时保留了enter键),用户确实会退出交互模式,但“是”似乎不会被捕获,因为我在“已知的\u主机”中没有看到sftp主机条目。需要检查为什么按“是”和“转义字符”不会将主机添加到“已知的\u主机”。为什么输入不正确。我将转义字符保留为“a”(根据您的回答)。在这种情况下,当用户说“是”而我没有按“a”时,该条目将添加到“已知的主机”中,并提示我输入密码(如果我按“a”,我将退出交互。但是,我不希望用户看到该密码提示。