Perl Net::SSH2 pty 模式和 EOF

Perl Net::SSH2 in pty mode and EOF

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

问题:

  1. 知道为什么 send_eof() 不起作用吗?
  2. 解决这个问题的最佳方法是什么?
  3. 如果启用了 pty,我可以假设不需要 send_eof() 吗?

P.S。我现在不包括任何代码片段,因为生产代码太复杂而无法解释问题,并且准备最小代码的工作版本需要一些时间。但我会尽快尝试用代码示例更新我的问题。

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

来自docs

send_eof

Sends an EOF to the remote side.

After an EOF has been sent, no more data may be sent to the remote process STDIN channel.

Note that if a PTY was requested for the channel, the EOF may be ignored by the remote server.