通过 telnet session 打开 python 解释器时,发送的每个命令都被拒绝,并显示“语法错误:语法无效”。
如何通过 telnet session 成功发送命令?

例子:
启动一个以交互模式提供 python 解释器的服务器:

socat TCP-LISTEN:5092 EXEC:'python -i'

与 telnet 连接并从 telnet session 发送命令:
>telnet localhost 5092
Trying ::1...
telnet: connect to address ::1: Connection refused
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
print "test"

服务器端的结果如下:
>socat TCP-LISTEN:5092 EXEC:'python -i'
Python 2.7.5 (default, Aug 25 2013, 00:04:04)
[GCC 4.2.1 Compatible Apple LLVM 5.0 (clang-500.0.68)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>   File "<stdin>", line 1
    print "test"
                ^
SyntaxError: invalid syntax
>>>

我在 Mac OS X 10.9.2 上的两个单独的终端窗口中运行所有这些。 Python 版本 2.7.5。

我发现了一个描述类似问题的问题 here ,但是,设置 PYTHONUNBUFFERED=NO 没有帮助。

此外,当直接与 python 解释器交互时(即不通过 telnet),不会发生此类错误。

我的怀疑是它有 s.th。与 telnet 发送行尾的方式有关。但是,尝试在 telnet session 中“切换 crlf”以将回车键从 <CR><NUL> 切换到 <CR><LF> 也无济于事。

任何帮助/想法/想法都非常感谢!

干杯,
卡斯腾

最佳答案

我自己找到了原因,所以对于 future 的搜索者:

telnet 会在使用 键入和发送的每个命令后自动添加一个 CR。但是,python 解释器不接受 CR (\r) 作为命令的一部分,并报告该字符的语法错误(\r 是不可打印的,因此可能在 python 生成的错误消息中不可见)。
另见此处:https://discussions.apple.com/thread/855998

我的解决方案是使用不同于 telnet 的工具进行通信:在这种情况下是 netcat。

nc -v localhost 5092

打开一个类似于 telnet 的 session ,其中 CR 不会自动添加到命令中。有用!

关于python 通过 telnet session 在行尾不断报告 "invalid syntax",我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23030187/

10-15 17:50