首页 文章

python通过telnet会话在行尾保持报告“无效语法”

提问于
浏览
3

通过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 回答

  • 2

    找到了我自己的理由,所以对于未来的搜索者:

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

    对我来说,解决方案是使用与telnet不同的工具进行通信:在这种情况下为netcat .

    nc -v localhost 5092
    

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

相关问题