stdin からデータを吸い込んでオブジェクトを作成する必要があります。
受信データの長さは 5 ~ 10 行です。各行には、プロセス番号と、IP アドレスまたはハッシュのいずれかが含まれています。例えば:
pid=123 ip=192.168.0.1 - some data
pid=123 hash=ABCDEF0123 - more data
hash=ABCDEF123 - More data
ip=192.168.0.1 - even more data
このデータを次のようなクラスに入れる必要があります。
class MyData():
pid = None
hash = None
ip = None
lines = []
IP、HASH、または PID でオブジェクトを検索できる必要があります。
難しいのは、stdin からの複数のデータ ストリームが混在していることです。(数百または数千のプロセスが同時にデータを書き込んでいる可能性があります。)
必要な PID、IP、および HASH を取得する正規表現がありますが、これらの値のいずれかでオブジェクトにアクセスするにはどうすればよいですか?
私の考えは、次のようなことをすることでした:
myarray = {}
for each line in sys.stdin.readlines():
if pid and ip: #If we can get a PID out of the line
myarray[pid] = MyData().pid = pid #Create a new MyData object, assign the PID, and stick it in myarray accessible by PID.
myarray[pid].ip = ip #Add the IP address to the new object
myarray[pid].lines.append(data) #Append the data
myarray[ip] = myarray[pid] #Take the object by PID and create a key from the IP.
<snip>do something similar for pid and hash, hash and ip, etc...</snip>
これにより、2 つのキー (PID と IP) を持つ配列が得られ、それらは両方とも同じオブジェクトを指します。しかし、ループの次の繰り返しで、(たとえば) IP と HASH を見つけて実行すると:
myarray[hash] = myarray[ip]
以下は偽です。
myarray[hash] == myarray[ip]
うまくいけば、それは明らかでした。VB の時代には、byval ではなく byref でオブジェクトを処理できたのを覚えています。Pythonに似たようなものはありますか? それとも、私はこれに間違って近づいていますか?