Мне нужно высосать данные из стандартного ввода и создать объект.
Входящие данные имеют длину от 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>
Это дает мне массив с двумя ключами (PID и IP), и они оба указывают на один и тот же объект.,Но на следующей итерации цикла, если я найду (например) IP и HASH и сделаю:
myarray[hash] = myarray[ip]
Следующее значение False:
myarray[hash] == myarray[ip]
Надеюсь, это было ясно,Я не хочу признавать, что в те дни, когда я жил в VB, я помню, как мог обрабатывать объекты byref, а не byval.Есть ли что-то подобное в Python?Или я просто неправильно это подхожу?