[Tutor] Looking up a value in a dictionary from user input problem
chase pettet
chase.mp at gmail.com
Thu Aug 6 23:18:55 CEST 2009
I am trying to write a script to work our LVS implementation. I want to be
able to have user do something like this "./script SITE SERVER" and have
the script look up the ip value of the site on that server and issue the
command to pull the status from LVS. I am almost there but for some reason
when I try to pass the site parameter dynamically (the name of the
dictionary) I keep getting errors about value type. I have two example that
work where the dictionary name is hard coded to to speak in the script, and
the value I want to pull is dynamic using sys.argv[1], and one where I'm
trying to pass the dictionary name and it does not work. I tried to slim
thse examples down, so hopefully they are helpful:
works #1...
./script.py t
#!/usr/bin/env python
site = {"l":"10.1.1.1", "t":"10.1.1.2", "x":"10.1.1.3", "s1":"10.1.1.4",
"s2":"10.1.1.5", "s3":"10.1.1.6"}
def runBash(cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
out = p.stdout.read().strip()
return out
class LVS_Site:
def show(self, site):
showsite = "ipvsadm -L -t %s:443" % (site)
showsiteresult = runBash(showsite)
return showsiteresult
a = LVS_Site()
b = site["%s" % (sys.argv[1])]
c = a.show(b)
print ""
print ""
print ""
print c
works #2...
./script.py t
#!/usr/bin/env python
site = {"l":"10.1.1.1", "t":"10.1.1.2", "x":"10.1.1.3", "s1":"10.1.1.4",
"s2":"10.1.1.5", "s3":"10.1.1.6"}
def runBash(cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
out = p.stdout.read().strip()
return out
class LVS_Site:
def show(self, site):
showsite = "ipvsadm -L -t %s:443" % (site)
showsiteresult = runBash(showsite)
return showsiteresult
a = LVS_Site()
z = site
b = z["%s" % (sys.argv[1])]
c = a.show(b)
print ""
print ""
print ""
print c
Not working...
./script.py t site
#!/usr/bin/env python
site = {"l":"10.1.1.1", "t":"10.1.1.2", "x":"10.1.1.3", "s1":"10.1.1.4",
"s2":"10.1.1.5", "s3":"10.1.1.6"}
def runBash(cmd):
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE)
out = p.stdout.read().strip()
return out
class LVS_Site:
def show(self, site):
showsite = "ipvsadm -L -t %s:443" % (site)
showsiteresult = runBash(showsite)
return showsiteresult
a = LVS_Site()
z = sys.argv[2]
b = b["%s" % (sys.argv[1])]
c = a.show(b)
print ""
print ""
print ""
print c
Error:
Traceback (most recent call last):
File "./python2.py", line 22, in ?
b = z["%s" % (sys.argv[1])]
TypeError: string indices must be integers
I don't understand why the third one does not work. Thanks for any help!
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.python.org/pipermail/tutor/attachments/20090806/850a6f00/attachment-0001.htm>
More information about the Tutor
mailing list