通过telnet会话打开python解释器时,发送的每个命令都会被“SyntaxError:invalid syntax”拒绝 . 如何通过telnet会话成功发送命令?
示例:启动以交互模式提供python解释器的服务器:
socat TCP-LISTEN:5092 EXEC:'python -i'
连接telnet并从telnet会话发送命令:
>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),不会发生这样的错误 .
我的怀疑是ssth . 与telnet发送行结尾的方式有关 . 但是,在telnet会话中尝试使用"toggle crlf"从 <CR><NUL>
切换到输入密钥的 <CR><LF>
也无济于事 .
任何帮助/想法/想法都非常感谢!
干杯,卡斯滕
1 回答
找到了我自己的理由,所以对于未来的搜索者:
telnet会在输入的每个命令后自动添加CR,并使用<enter>发送 . 但是,python解释器不接受CR(\ r)作为命令的一部分,并报告该字符的语法错误(\ r \ n是不可打印的,因此可能在python生成的错误消息中不可见) . 另见:https://discussions.apple.com/thread/855998
对我来说,解决方案是使用与telnet不同的工具进行通信:在这种情况下为netcat .
打开一个类似telnet的会话,其中CR不会自动添加到命令中 . 有用!