在pty模式下的Perl Net :: SSH2和EOF

时间:2017-02-22 06:50:35

标签: perl ssh eof pty

我正在使用perl Net :: SSH2 v0.48并尝试执行从stdin读取输入的远程脚本。此连接的通道使用vt100 pty来满足某些特定要求。在向stdin写入数据后,我也在调用$channel->send_eof();。但远程脚本似乎根本没有收到任何EOF字符。远程脚本在python中并从stdin读取,如sys.stdin.read(),它会挂起,直到它获得EOF。当我禁用pty或附加chr(4)输入有效负载(即EOF字符)时,这个问题就会得到解决。

问题:

  1. 知道为什么send_eof()无效?
  2. 解决此问题的最佳方法是什么?
  3. 如果启用了pty,我可以假设不需要send_eof()吗?
  4. P.S。我现在没有包含任何代码片段,因为生产代码太复杂而无法解释问题,并且需要一些时间来准备最小代码的工作版本。但我会尽快用代码示例更新我的问题。

1 个答案:

答案 0 :(得分:2)

如果pty已启用,我可以假设不需要send_eof()吗?

来自docs

  

<强> send_eof

     

向远程端发送EOF。

     

发送EOF后,不再向遥控器发送数据   处理STDIN频道。

     

请注意如果为频道请求了PTY,远程服务器可能会忽略EOF。