== Google Protocol Buffer > aptitude install build-essential > aptitude install python-dev > wget http://protobuf.googlecode.com/files/protobuf-2.1.0.tar.gz > tar zxvf protobuf-2.1.0.tar.gz > cd protobuf-2.1.0 > ./configure > make > make check > make install > cd python > python setup.py test > python setup.py install > cd > mkdir src > mkdir build > cp /root/work/protobuf-2.1.0/examples/addressbook.proto /root/src/. > export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/local/lib > protoc -I=src --python_out=build src/addressbook.proto > ls build/addressbook_pb2.py > protoc -I=src --python_out=build src/test.proto > cd builed > vim writhing.py #! /usr/bin/python import addressbook_pb2 import sys # This function fills in a Person message based on user input. def PromptForAddress(person): person.id = int(raw_input("Enter person ID number: ")) person.name = raw_input("Enter name: ") email = raw_input("Enter email address (blank for none): ") if email != "": person.email = email while True: number = raw_input("Enter a phone number (or leave blank to finish): ") if number == "": break phone_number = person.phone.add() phone_number.number = number type = raw_input("Is this a mobile, home, or work phone? ") if type == "mobile": phone_number.type = addressbook_pb2.Person.MOBILE elif type == "home": phone_number.type = addressbook_pb2.Person.HOME elif type == "work": phone_number.type = addressbook_pb2.Person.WORK else: print "Unknown phone type; leaving as default value." # Main procedure: Reads the entire address book from a file, # adds one person based on user input, then writes it back out to the same # file. if len(sys.argv) != 2: print "Usage:", sys.argv[0], "ADDRESS_BOOK_FILE" sys.exit(-1) address_book = addressbook_pb2.AddressBook() # Read the existing address book. try: f = open(sys.argv[1], "rb") address_book.ParseFromString(f.read()) f.close() except IOError: print sys.argv[1] + ": Could not open file. Creating a new one." # Add an address. PromptForAddress(address_book.person.add()) # Write the new address book back to disk. f = open(sys.argv[1], "wb") f.write(address_book.SerializeToString()) f.close() > vim reading.py #! /usr/bin/python import addressbook_pb2 import sys # Iterates though all people in the AddressBook and prints info about them. def ListPeople(address_book): for person in address_book.person: print "Person ID:", person.id print " Name:", person.name if person.HasField('email'): print " E-mail address:", person.email for phone_number in person.phone: if phone_number.type == addressbook_pb2.Person.MOBILE: print " Mobile phone #: ", elif phone_number.type == addressbook_pb2.Person.HOME: print " Home phone #: ", elif phone_number.type == addressbook_pb2.Person.WORK: print " Work phone #: ", print phone_number.number # Main procedure: Reads the entire address book from a file and prints all # the information inside. if len(sys.argv) != 2: print "Usage:", sys.argv[0], "ADDRESS_BOOK_FILE" sys.exit(-1) address_book = addressbook_pb2.AddressBook() # Read the existing address book. f = open(sys.argv[1], "rb") address_book.ParseFromString(f.read()) > python writing.py google.txt google.txt: Could not open file. Creating a new one. Enter person ID number: 1 Enter name: Jun Enter email address (blank for none): sakaijunsoccer@gmail.com Enter a phone number (or leave blank to finish): 111-111-111 Is this a mobile, home, or work phone? mobile Enter a phone number (or leave blank to finish): > python reading.py google.txt Person ID: 1 Name: Jun E-mail address: sakaijunsoccer@gmail.com Mobile phone #: 111-111-111