web-dev-qa-db-ja.com

stdinおよびstdoutでminicomをどのように使用しますか?

Python USBからRS-232へのコンバーターを介してデバイスに通信する必要があります。アプリケーションminicomはシームレスに接続するので、非対話型モードで実行できれば、すべてが素晴らしいでしょう。

ドキュメントを読むと、いくつかの興味深いオプションがありますが、私はそれらのいずれかを完全には理解していません。

 -t   Terminal type. With this flag, you can override the environment 
      TERM variable. 

 -S   script.   Run  the named script at startup.

アプリケーションとminicomの間でデータをパイプするにはどうすればよいですか?他のものを使用する必要がありますか?

1
Vorac

minicomはインタラクティブな使用には最適ですが、プログラムによるI/Oには適していません。

ローカルのPythonプログラムは、シリアルポートの/devノードを開くだけです。ファイルに書き込むのと同じように機能します。

fd = os.open('/dev/ttyUSB0', os.O_RDWR)
fd.write(...)

唯一注意が必要なのは、ビットレートなどを設定することです。そのためには、 Pythonのtermiosライブラリ を使用します:

attr = termios.tcgetattr(fd)
attr[5] = attr[6] = termios.B9600
termios.tcsetattr(fd, termios.TCSANOW, attr)

このためのPythonドキュメントは、CからこのAPIを使用していて、Pythonへの変換のヘルプが必要なことをほぼ前提としています。したがって、このパスをたどる場合は、StevensやRagoのようなクラシックを使用する必要があります。 Unix環境での高度なプログラミング

termiosレベルを上回り、* ix以外の型システムへの移植性を提供する高レベルのライブラリは pySerial です。

6
Warren Young

上記のウォーレン・ヤングの答えは正しいですが、怠惰さのためにもっと良い答えがあります:

_cat $file > /dev/ttyUSB0_も同様に機能します。 tc(g|s)etattr呼び出しに関しては、それらはsttyコマンドによって処理されます(例:_stty -F /dev/ttyUSB0 9600_)!

0
R.D.