【问题标题】:Is there a way to embed a `\r` or even a `\n` to send over telnet in Python?有没有办法在 Python 中嵌入 `\r` 甚至 `\n` 以通过 telnet 发送?
【发布时间】:2017-05-07 08:10:28
【问题描述】:

我正在尝试为 IP 视频设备发送嵌入在 telnet 数据中的 RS232 命令。使用 Tera Term 和 windows 命令提示符 telnet 可以完美运行,但使用 Python (telnetlib) 无法正常运行

Using Tera Term, it works fine:

Correct Result (Fan status of 3 fans) MCU responds Correctly

但是,当我使用 Python 的 Telnet 库时:

tn = telnetlib.Telnet(HOST,PORT,timeout = 3)
tn.write('send '+ DEVICE_MAC + ' rs232:1 get_fan ?\r')

HOST、PORT 和 DEVICE_MAC 都在我的原始代码中定义。 由于某种原因,\r 没有发送到 HOST。

get_fan ?\r 

HOST MCU 需要\r 才能正确处理get_fan ? 命令,但上面的Python 代码只发送get_fan ? 而没有\r

有没有办法嵌入\r 甚至\n 以通过telnet 发送? 我正在 telnetlib.py 中寻找线索,但也许解决方案更简单。如果可能的话,我会很感激你的 cmets。谢谢!

【问题讨论】:

  • 如果我做对了,您想将get_fan ?\r 发送/传递给命令send <some_mac> rs232:1 ... 如果是这样,请尝试将其括在单引号之间,您也可以考虑转义\r\\r。如果您想“只需按 enter”,请尝试使用“\n”。除了少数几种型号的路由器,我遇到的几乎每个 telnet 服务器都使用“默认”telnet 换行符,即“\n”。
  • 嗨洛马尔。感谢您的评论。我明白你的观点,我完全同意你的观点。问题是一旦 telnetlib.py 在要发送的数据中看到“\n”,它就会将其解释为将 telnet 数据(或刷新。())发送到套接字(我认为)。我发誓,这几天我一直在为此感到压力,我刚刚找到了解决方案。我会发布一个答案。

标签: python serial-port telnet


【解决方案1】:

所以解决这个问题的方法是使用“字符串文字”的概念。我刚刚在这个链接上遇到了线索https://docs.python.org/2.0/ref/strings.html

我应该从一开始就使用的正确代码是:

tn = telnetlib.Telnet(HOST,PORT,timeout = 3)
tn.write('send '+ DEVICE_MAC + ' rs232:1 get_fan ?' + r'\r' + '\r\n')

我使用+ 连接只是为了清楚起见,但在'\r' 之前添加r 可以防止回车被解释为telnet 转义序列,因此它作为telnet 数据中的字符串发送。第二个回车和换行\r\n 肯定需要被解释为一个转义序列来刷新套接字并发送 telnet 数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-08-06
    • 2011-09-19
    • 1970-01-01
    • 2016-03-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-12
    相关资源
    最近更新 更多