2

私は現在、Pythonスクリプト内でシリアルデータをキャプチャしようとしています。スクリプトの残りの部分がテストしているシステムと対話し続けている間に、シリアルポートでキャプチャされたすべてのデータのログのキャプチャを開始するつもりです。

pyserialを使用すると、ロギングが完了するまで実行したい残りのテストがブロックされると思います。

私が検討したオプションは次のとおりです。

  • pyserialを使用してログをキャプチャする別のスクリプトを作成し、subprocess.Popen()を使用してこのスクリプトを呼び出します。
  • tailやcatなどの組み込みのUNIXツールを使用し、subprocess.Popen()でこれらを呼び出します。

私はこれらのいずれかを機能させる方法を見つけることができると確信していますが、誰かがそれを行うより直接的な方法を知っているなら、私は知りたいです。

前もって感謝します。

4

2 に答える 2

6

pySerialからデータを読み取るための別のプロセスを作成するのはなぜですか?読み取りを非ブロックにするために、シリアルクラスでタイムアウトを設定できます。例えば

ser = serial.Serial()
ser.baudrate = 19200
ser.port = 0
ser.timeout = 2 #By default, this is set to None
ser.open()

また、参照用にラッパークラスを確認してください。

http://pyserial.sourceforge.net/examples.html#wrapper-class

スレッドを実行して、シリアルからデータを読み取り続け、バッファーに更新することができます。

別のプロセスを作成すると、IPCのオーバーヘッドが発生するため、このタスクにはお勧めしません。

于 2012-07-23T10:14:49.410 に答える
3

リンクを参照して、利用可能なデータがあるかどうかをいつでも確認できますser.inWaiting()

from serial import Serial
ser = Serial(port=0, baudrate=19200) # set the parameters to what you want
while 1:
    if ser.inWaiting():
        temp = ser.read()
    #all the other code in the loop

ループを読み取るために使用できるデータがない場合、シリアル読み取りをスキップします

または、データが時間に敏感な場合は、これを行うことができます

于 2013-01-14T14:57:37.103 に答える