0

最初の投稿はここで、私は一般的にプログラミングの素人だと言わざるを得ません... 私は osx で python 2.7.5 サブプロセス モジュールを使用して、dns-sd というユーティリティの出力を読み取ります。

目標は、ネットワーク上で実行されている SSH ファイル サーバーを見つけることです。「dns-sd -B _ssh._tcp」を使用します。次の使用で正常に動作します。

from sys import *
from subprocess import *

class ProcessNAS(object):
    def __init__ (self, name):
        self.name = name
        self.status = False
        self.process = None

    def StartCheck(self):
        print "Checking for NAS..."
        stdout.flush()
        self.process = Popen( ["dns-sd", "-B", "_ssh._tcp", "."], stdout=PIPE )

        while True:
            line = self.process.stdout.readline()[:-1]
            print line
            if "Add" in line and self.name in line:
                self.status = True
                print "NAS '" + self.name + "' is available."
            elif "Rmv" in line and self.name in line:
                self.status = False
                print "NAS '" + self.name + "' is unavailable."


newCheckNAS = ProcessNAS("Drobo-FS")
newCheckNAS.StartCheck()

これは「ライブ」ユーティリティであり、Python スクリプトを実行し続けると、dns-sd が出力する新しい行が自動的に表示されることに注意してください。典型的な出力は次のとおりです。

Checking for NAS...
Browsing for _ssh._tcp
DATE: ---Tue 02 Jul 2013---
19:44:30.670  ...STARTING...
Timestamp     A/R Flags if Domain       Service Type       Instance Name
19:48:07.061  Add     2  4 local.       _ssh._tcp.         Drobo-FS
NAS 'Drobo-FS' is available.

私が抱えている問題は、newCheckNAS.StartCheck() を実行するとすぐに、プログラムの残りの部分が dns-sd ユーティリティが完了するのを待って続行することです。ただし、このライブ ユーティリティは停止することはなく、バックグラウンドで監視を続ける必要があります。

さまざまなスレッド、マルチプロセッシング、さらには pybonjour モジュールを見ましたが、それらがどのように機能するのかよくわかりません... このユーティリティを実行するスレッドと、それをリッスンする別のスレッドを開始する必要があると思いますか?

4

1 に答える 1