1

socatで仮想ポートを1つだけ作成する方法は?

1つのポートを介して読み書きするためにpyserialをテストしたい

私はすでに試しています:

socat -d -d pty,raw,echo=1 pty,raw,echo=1

2 つの仮想ポート /dev/pts/9 と /dev/pts/10 を作成します

私が試しているとき:

ser.write('test\n')

別のコンソールで、私は読み込もうとしています:

ser2.readline()

タイムアウト時、pyserial は '\n' を '^J' として読み取ります

4

1 に答える 1

3

^Jは と同じです。ウィキペディア\nを参照してください。発生したブロッキングを再現できません:

$ socat -d -d pty,raw,echo=1 pty,raw,echo=1
2012/06/14 14:29:13 socat[28866] N PTY is /dev/pts/3
2012/06/14 14:29:13 socat[28866] N PTY is /dev/pts/5
2012/06/14 14:29:13 socat[28866] N starting data transfer loop with FDs [3,3] and [5,5]

ターミナル1:

>>> import serial
>>> s = serial.Serial('/dev/pts/5')
>>> s.readline()
'hello\r\n'
>>> s.readline()
'hello\n'

ターミナル2:

>>> import serial
>>> s = serial.Serial('/dev/pts/3')
>>> s.write('hello\r\n')
7
>>> s.write('hello\n')
6

他のreadline()端末で書き込みを実行するとすぐに呼び出しが返されます。

于 2012-06-14T12:38:46.187 に答える