python通过telnet会话在行末持续报告"无效语法
在通过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。
我发现有一个问题描述了类似的情况,在这里,但是设置PYTHONUNBUFFERED=NO并没有解决问题。
而且,当直接与python解释器交互时(也就是不通过telnet),不会出现这样的错误。
我怀疑这可能与telnet发送行结束符的方式有关。我尝试在telnet会话中切换“toggle crlf”,将回车键的格式从<CR><NUL>
改为<CR><LF>
,但也没有帮助。
任何帮助、想法或建议都非常感谢!
祝好, Carsten
1 个回答
2
我自己找到了原因,所以给未来搜索的人一个提示:
当你在使用telnet时,每次输入命令并按下
你可以参考这里:https://discussions.apple.com/thread/855998
对我来说,解决办法是使用一个不同的工具来进行通信,这里我用了netcat。
nc -v localhost 5092
它打开了一个类似telnet的会话,但不会自动在命令后加回车符。这样就可以正常工作了!