9

1 つの Python スクリプトを連続ループで実行する必要があり、アクションが発生したときに実行される別のスクリプトからパラメーターを渡す必要がある状況があります。

2 番目のスクリプトは、cgi を使用する Web サイトによってトリガーされます。私はこれで問題なく動作しています。連続ループは、cgi スクリプトによって読み取られたパラメーターを受け取る必要があります (そして、シリアル ポート経由で情報を送信します)。

特定の問題については、実行するたびにシリアルポートがリセットされるため、CGIスクリプトにシリアル経由でデータを直接送信させることはできません。

この種のセットアップに関する情報が見つからないようです。これを調べる方法やライブラリ、またはそれに近づくより良い方法はありますか?

4

2 に答える 2

10

ソケット接続を使用します。基本的に、一度に 1 つの接続のみを使用する非常に単純なサーバーを作成しています。

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind(("localhost", 9988))
s.listen(1)

while True:
    conn, addr = s.accept()
    data = conn.recv(1024)
    conn.close()
    my_function_that_handles_data(data)

s.accept()ブロッキングコールです。接続を待ちます。次に、接続で読み取りを行います。この場合、パラメータの長さはわずか 1024 バイトであると想定しています。次に、ソケットから受け取ったデータで何かを行い、別の接続を待ちます。

クライアントは次のようになります。

import socket
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect(("localhost", 9988))
s.sendall('My parameters that I want to share with the server')
s.close()

これの良いところは、将来、クライアントとサーバーが同じマシンで実行されなくなった場合"localhost"に、ヒットする実際の IP アドレスまたはドメイン名に変更するだけで済むことです。

于 2013-09-04T14:24:07.670 に答える