Perl-Net::pty模式下的SSH2和EOF
我正在使用perl Net::SSH2 v0.48并尝试执行一个远程脚本,该脚本从stdin读取输入。此连接的通道使用vt100 pty满足某些特定要求。在将数据写入stdin之后,我还调用了Perl-Net::pty模式下的SSH2和EOF,perl,ssh,eof,pty,Perl,Ssh,Eof,Pty,我正在使用perl Net::SSH2 v0.48并尝试执行一个远程脚本,该脚本从stdin读取输入。此连接的通道使用vt100 pty满足某些特定要求。在将数据写入stdin之后,我还调用了$channel->send_eof()。但是远程脚本似乎根本没有接收任何EOF字符。远程脚本使用python并从stdin读取,如sys.stdin.read(),它将挂起,直到获得EOF。当我禁用pty或使用输入有效负载(即EOF字符)追加chr(4)时,这个问题就得到了解决 问题: 知道为什么send
$channel->send_eof()代码>。但是远程脚本似乎根本没有接收任何EOF字符。远程脚本使用python并从stdin读取,如sys.stdin.read()
,它将挂起,直到获得EOF。当我禁用pty或使用输入有效负载(即EOF字符)追加chr(4)
时,这个问题就得到了解决
问题:
知道为什么send\u eof()
不起作用吗
解决这个问题的最好办法是什么
如果启用pty,是否可以假定不需要send\u eof()
另外,我现在不包括任何代码片段,因为生产代码太复杂,无法解释问题,并且需要一些时间来准备最小代码的工作版本。但是我会尽快用一个代码示例更新我的问题。如果启用了pty,我是否可以假定不需要send_eof()
发件人:
send\u eof
向远程端发送EOF
发送EOF后,不能再向远程发送数据
处理STDIN通道
请注意,如果为通道请求PTY,远程服务器可能会忽略EOF。
远程服务器可能会忽略EOF
,这是否意味着即使我将EOF作为输入数据的一部分附加,也可能会忽略EOF?显然,这并没有发生,但似乎有更多的信息来了解整个情况。Tty设备不允许只关闭连接的一侧。这就是为什么在通道级别上的EOF请求被忽略的原因。版本0.48非常旧而且有缺陷。你应该用最近的。