我需要从stdin中吸取数据并创建一个对象。Python访问对象byref /需要标记
传入的数据长度在5到10行之间。每行都有一个进程号和一个IP地址或一个哈希。 例如:
pid=123 ip=192.168.0.1 - some data
pid=123 hash=ABCDEF- 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查找的对象。
困难的部分是有多个数据流混合来自标准输入。 (可能有数百或数千个进程同时写入数据。)
我有拉出我需要的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]
以下是假:
myarray[hash] == myarray[ip]
希望这是显而易见的。 我讨厌承认在VB日waaay回来,我记得能够处理对象byref而不是byval。 Python中有类似的东西吗?或者我刚刚接近这个错误?
我无法一次添加全部。每次我经历循环时,我都会得到不同的pid,ip和hash组合。每次通过循环时,我都知道我有什么组合,并通过数组来查看对象。然后我将它与新发现的pid,ip或hash关联起来。 例如,第一行可能只是一个pid。第二行可能是一个PID和散列。第三行可能是散列和ip。 似乎Python正在创建MyData的副本,例如我做了 mydict [ip] = mydict [hash]。 如果我然后做mydict [hash] .blah = 1,那么mydict [ip]不会改变。 – 2010-06-19 03:41:16
这就是为什么'process()'返回它没有的位的None。不,它不会复制。 – 2010-06-19 07:02:03