これらのことを実行する方法の例はたくさんあります。LinuxでのPythonでのプログラム間通信
1)異なるプログラム間で通信を行います。 pythonから文字列を送信するための標準的な方法です何
- :
2)この質問はどこにでも私が見てきた何の良い例を持っていない、
しかし、ネットワークを介したクライアント/サーバー間の通信プログラムAをプログラムBにブロックし、この文字列をブロックして処理し、ループ内で別のものを待つ?
答えに何度も近づいたような気がしますが、実際の例を作成することはできませんでした。
追加暗黙の要件:
- 実は2つの切り抜いたプログラム:例は、実際には2つの切り抜いたプログラムを持っている必要があります(別途二つの画面にコマンドラインから実行することができる、すなわち二つのファイルprogA.py、progB.py同じマシン上で)、クライアントやサーバーを作成するために、何らかのフォークやマルチプロセスを使用しないでください。
- データサイズの正確なバイト数を正確に取得する代わりに、可変長区切り文字列を合理的な長さまで送信できるようにする方法を提案してください。 (後者は、実装上、エラーが発生しやすくなります)。
- 理想的には例えば、ローカルホストのインターネット接続に
を利用せずにこれを行います。
pipein = open(pipe_name, 'r')
while program.KeepRunning:
action = pipein.readline()[:-1]
program.processLine(line)
time.sleep(1)
をし、作家が使用しています:読者が使用している場合
command = "enable"
pipeout = os.open(pipe_name, os.O_WRONLY)
os.write(pipeout, command)
os.write(pipeout, "\n")
リーダーは空の文字列を読み取る無限ループで立ち往生http://www.python-course.eu/pipes.php で提案されます。興味深いことに、は、のコードの一部が実行されてから、空行を永遠に読み取る前に実行されています。if(action == 'enable'): longFunction()
をprogram.processLine
関数に追加すると、興味深いことです。
一方、最近の低レベルの低レベルのsubprocess
モジュールを使用するすべての例では、複数のアプリケーションではなくマルチスレッドアプリケーションのみが使用されます。他の実装には、ソケットとネットワーキングが含まれます。
私はソケットを利用しようとしましたが、これは、何かが間違ったタイプのエラーとなる可能性があります。多くの場合、Error 111: “connection refused”
が表示されます。特定のコマンドを受け取ったときに実行されるPythonコードの一部がネットワーク設定を実際に変更します(たとえば、ip
、tc
、iptables
などのコマンドをさまざまな引数で呼び出します)。localhost
へのネットワーク接続を使用すると、デバッグし、一般的に厄介な問題に。 2番目のプログラムが同じマシン上で実行されるために不必要な部分のほかに、どのようなプログラム間通信でもネットワークインタフェースを使用する必要はありません。
あなたは[multiprocessing.Queue](https://pymotw.com/2/multiprocessing/communication.html) – Pynchia