5、URL处理程序

URL处理程序

概述

该函数serial_for_url()接受以下类型的URL:

  • rfc2217://<host>:<port>[?<option>[&<option>...]]
  • socket://<host>:<port>[?logging={debug|info|warning|error}]
  • loop://[?logging={debug|info|warning|error}]
  • hwgrep://<regexp>[&skip_busy][&n=N]
  • spy://port[?option[=value][&option[=value]]]
  • alt://port?class=<classname>

在3.0版中更改:使用?&不是使用而不是指定选项/

设备名称也受支持,例如:

  • /dev/ttyUSB0 (Linux)的
  • COM3 (视窗)

未来的pySerial版本可能会添加更多类型。从pySerial 2.6开始,用户也可以使用添加协议处理程序protocol_handler_packages

rfc2217://

用于连接 RFC 2217兼容服务器。支持所有串行端口功能。实施者rfc2217.Serial

URL中支持的选项是:

  • ign_set_control不等待SET_CONTROL的确认。此选项可用于不兼容的服务器(即在连接时收到错误)。remote rejected value for option 'control'
  • poll_modem:客户端在读取状态行时发出NOTIFY_MODEMSTATE请求(CTS / DTR / RI / CD)。没有这个选项,它依赖于服务器自动发送通知(这是RFC建议的,大多数服务器都这样做)。如果cts不能按预期工作,即对于不发送通知的服务器,请启用此选项。
  • timeout=<value>:更改网络超时(默认为3秒)。当服务器花费更多时间发送答案时,这非常有用。超时适用于初始Telnet /RFC 2271协商以及更改端口设置或控制线路更改命令。
  • logging={debug|info|warning|error}:打印诊断消息(对最终用户无用)。它使用日志记录模块和一个被调用的记录器, pySerial.rfc2217以便应用程序可以设置日志记录处理程序等。它将调用logging.basicConfig()哪个初始化输出sys.stderr(如果没有设置日志记录)。

警告

连接未加密,不支持身份验证!仅在受信任的环境中使用它。

socket://

此连接类型的目的是使用pySerial的应用程序可以连接到TCP / IP到不支持的串行端口转换器 RFC 2217

使用TCP / IP套接字。所有串行端口设置,控制和状态行都将被忽略。仅传输和接收数据。

URL中支持的选项是:

  • logging={debug|info|warning|error}:打印诊断消息(对最终用户无用)。它使用日志记录模块和一个被调用的记录器, pySerial.socket以便应用程序可以设置日志记录处理程序等。它将调用logging.basicConfig()哪个初始化输出sys.stderr(如果没有设置日志记录)。

警告

连接未加密,不支持身份验证!仅在受信任的环境中使用它。

loop://

最不实用的类型。它模拟环回连接(RX<->TX RTS<->CTS DTR<->DSR)。它可用于测试应用程序或运行单元测试。

URL中支持的选项是:

  • logging={debug|info|warning|error}:打印诊断消息(对最终用户无用)。它使用日志记录模块和一个被调用的记录器, pySerial.loop以便应用程序可以设置日志记录处理程序等。它将调用logging.basicConfig()哪个初始化输出sys.stderr(如果没有设置日志记录)。

hwgrep://

此类型用于serial.tools.list_ports获取端口列表,并通过斜杠后面的正则表达式在列表中搜索匹配项(re有关详细语法信息,请参阅Pythons 模块)。

请注意,使用字符分隔选项&,这也适用于URL通常使用的第一个选项?。此异常是在regexp本身中使用问号时生成的。

根据系统上list_ports模块的功能,可以搜索设备的描述或硬件ID,例如USB VID:PID或文本。

不幸的是,在某些系统上list_ports只列出了端口名称的子集而没有其他信息。目前,在Windows和Linux以及OSX上,它应该找到其他信息。

URL中支持的选项是:

  • n=N:选择第N个条目而不是第一个条目
  • skip_busy:跳过无法打开的端口,例如因为它们已在使用中。在文件未自动锁定的平台上(例如Posix),这可能无法正常工作。

spy://

通过包装本机串行端口,该协议可以拦截接收和发送的数据以及对控制线,中断和刷新命令的访问。它主要用于调试应用程序。

URL中支持的选项是:

  • file=FILENAME 输出到给定的文件或设备而不是stderr
  • color 启用ANSI转义序列以着色输出
  • raw直接输出读取和写入的数据(默认是创建十六进制转储)。在此模式下,不记录控制线和其他命令。
  • all还显示in_waiting和清空read()呼叫(由于流量很大,默认隐藏)。

例:

import serial

with serial.serial_for_url('spy:///dev/ttyUSB0?file=test.txt', timeout=1) as s:
    s.dtr = False
    s.write('hello world')
    s.read(20)
    s.dtr = True
    s.write(serial.to_bytes(range(256)))
    s.read(400)
    s.send_break()

with open('test.txt') as f:
    print(f.read())

输出:

000000.002 Q-RX reset_input_buffer
000000.002 DTR  inactive
000000.002 TX   0000  68 65 6C 6C 6F 20 77 6F  72 6C 64                 hello world
000001.015 RX   0000  68 65 6C 6C 6F 20 77 6F  72 6C 64                 hello world
000001.015 DTR  active
000001.015 TX   0000  00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  ................
000001.015 TX   0010  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F  ................
000001.015 TX   0020  20 21 22 23 24 25 26 27  28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
000001.015 TX   0030  30 31 32 33 34 35 36 37  38 39 3A 3B 3C 3D 3E 3F  0123456789:;<=>?
000001.015 TX   0040  40 41 42 43 44 45 46 47  48 49 4A 4B 4C 4D 4E 4F  @ABCDEFGHIJKLMNO
000001.016 TX   0050  50 51 52 53 54 55 56 57  58 59 5A 5B 5C 5D 5E 5F  PQRSTUVWXYZ[\]^_
000001.016 TX   0060  60 61 62 63 64 65 66 67  68 69 6A 6B 6C 6D 6E 6F  `abcdefghijklmno
000001.016 TX   0070  70 71 72 73 74 75 76 77  78 79 7A 7B 7C 7D 7E 7F  pqrstuvwxyz{|}~.
000001.016 TX   0080  80 81 82 83 84 85 86 87  88 89 8A 8B 8C 8D 8E 8F  ................
000001.016 TX   0090  90 91 92 93 94 95 96 97  98 99 9A 9B 9C 9D 9E 9F  ................
000001.016 TX   00A0  A0 A1 A2 A3 A4 A5 A6 A7  A8 A9 AA AB AC AD AE AF  ................
000001.016 TX   00B0  B0 B1 B2 B3 B4 B5 B6 B7  B8 B9 BA BB BC BD BE BF  ................
000001.016 TX   00C0  C0 C1 C2 C3 C4 C5 C6 C7  C8 C9 CA CB CC CD CE CF  ................
000001.016 TX   00D0  D0 D1 D2 D3 D4 D5 D6 D7  D8 D9 DA DB DC DD DE DF  ................
000001.016 TX   00E0  E0 E1 E2 E3 E4 E5 E6 E7  E8 E9 EA EB EC ED EE EF  ................
000001.016 TX   00F0  F0 F1 F2 F3 F4 F5 F6 F7  F8 F9 FA FB FC FD FE FF  ................
000002.284 RX   0000  00 01 02 03 04 05 06 07  08 09 0A 0B 0C 0D 0E 0F  ................
000002.284 RX   0010  10 11 12 13 14 15 16 17  18 19 1A 1B 1C 1D 1E 1F  ................
000002.284 RX   0020  20 21 22 23 24 25 26 27  28 29 2A 2B 2C 2D 2E 2F   !"#$%&'()*+,-./
000002.284 RX   0030  30 31 32 33 34 35 36 37  38 39 3A 3B 3C 3D 3E 3F  0123456789:;<=>?
000002.284 RX   0040  40 41 42 43 44 45 46 47  48 49 4A 4B 4C 4D 4E 4F  @ABCDEFGHIJKLMNO
000002.284 RX   0050  50 51 52 53 54 55 56 57  58 59 5A 5B 5C 5D 5E 5F  PQRSTUVWXYZ[\]^_
000002.284 RX   0060  60 61 62 63 64 65 66 67  68 69 6A 6B 6C 6D 6E 6F  `abcdefghijklmno
000002.284 RX   0070  70 71 72 73 74 75 76 77  78 79 7A 7B 7C 7D 7E 7F  pqrstuvwxyz{|}~.
000002.284 RX   0080  80 81 82 83 84 85 86 87  88 89 8A 8B 8C 8D 8E 8F  ................
000002.284 RX   0090  90 91 92 93 94 95 96 97  98 99 9A 9B 9C 9D 9E 9F  ................
000002.284 RX   00A0  A0 A1 A2 A3 A4 A5 A6 A7  A8 A9 AA AB AC AD AE AF  ................
000002.284 RX   00B0  B0 B1 B2 B3 B4 B5 B6 B7  B8 B9 BA BB BC BD BE BF  ................
000002.284 RX   00C0  C0 C1 C2 C3 C4 C5 C6 C7  C8 C9 CA CB CC CD CE CF  ................
000002.284 RX   00D0  D0 D1 D2 D3 D4 D5 D6 D7  D8 D9 DA DB DC DD DE DF  ................
000002.284 RX   00E0  E0 E1 E2 E3 E4 E5 E6 E7  E8 E9 EA EB EC ED EE EF  ................
000002.284 RX   00F0  F0 F1 F2 F3 F4 F5 F6 F7  F8 F9 FA FB FC FD FE FF  ................
000002.284 BRK  send_break 0.25

另一个例子,在POSIX上,打开第二个终端窗口并查找它的设备(例如,使用psTTY列中的命令),假设在 /dev/pts/2这里,使用双引号,以便shell中的&符号不被shell解释:

python -m serial.tools.miniterm "spy:///dev/ttyUSB0?file=/dev/pts/2&color" 115200

间谍输出将在第二个终端窗口中生效。

版本3.0中的新功能。

alt://

此处理程序允许选择本机串行端口的备用实现。

目前只有POSIX平台提供替代实现。

PosixPollSerial

基于轮询的读取实现。并非所有系统都支持轮询。然而,这个更好地处理错误,例如设备在使用时断开连接(例如USB串行拔出)。

VTIMESerial

使用VTIMEVMINTTY设备实现超时而不是使用 select。这意味着不能同时使用字符间超时和总超时。使用字符间超时时,将禁用总体超时。错误处理降级。

例子:

alt:///dev/ttyUSB0?class=PosixPollSerial
alt:///dev/ttyUSB0?class=VTIMESerial

版本3.0中的新功能。

示例

  • rfc2217://localhost:7000
  • rfc2217://localhost:7000?poll_modem
  • rfc2217://localhost:7000?ign_set_control&timeout=5.5
  • socket://localhost:7777
  • loop://?logging=debug
  • hwgrep://0451:f432 (USB VID:PID)
  • spy://COM54?file=log.txt
  • alt:///dev/ttyUSB0?class=PosixPollSerial

猜你喜欢

转载自blog.csdn.net/Yuyh131/article/details/84168464