スクリプトからFIFOへのパイプ

スクリプトからFIFOへのパイプ

スクリプトからTwinkle(VOIPソフトウェア)にコマンドを送信したいと思います。名前付きパイプを使用してこれを行うことができると思います。

mkfifo phonecmd

Twinkleを起動して名前付きパイプからパイプテールをパイプすると、名前付きパイプに書き込んでコマンドを送信できます。

tail -f phonecmd | twinkle -c
...
echo answer > phonecmd

しかし、私が本当に望むのは、Pythonスクリプトを使用してRaspberry PiのGPIOピンを監視するコマンドを送信することですが、どうすればいいのかわかりません。

python gpio.py

Raspberry PiのGPIOピンが変更されたかどうかに応じて、「回答」または「こんにちは」を印刷します。

python gpio.py | phonecmd

Phonecmdがコマンドではないため(名前が指定されたパイプであるため)、エラーが発生します。

python gpio.py > phonecmd

これは効果的な方法の1つです。リダイレクトはバッファリングされるため、Pythonプロセスが閉じられた後にのみ、すべてがPhonecmdパイプに書き込まれます。

リダイレクトやパイプを「リアルタイム」にする方法はありますか?

ベストアンサー1

|パイプ演算子が機能しない理由は、パイプ演算子に別のコマンドが必要なためです。出力リダイレクト演算子は、>通常のファイルではなく一般的な意味のファイルであるファイルに出力します。

パイプの出力は通常バッファリングされ、出力ストリームをフラッシュしたり、標準出力のバッファリングを変更したりできます。

あなたにとって最もエレガントな解決策は、Pythonで名前付きパイプを開き、文字列(「答え」または「こんにちは」)を作成してからファイル/パイプを閉じることです。これにより、サーバープロセスとPythonクライアントを分離できます。サーバープロセス(twinkle -c)を再起動してPythonプロセスを実行することもできます。

おすすめ記事