Seite 1 von 1

ValueError: need more than 4 values to unpack

Verfasst: Samstag 30. August 2008, 15:59
von rtz26
Hallo,

ich habe einige Schwierigkeiten ein Paar Zeilen Python Code zum Laufen zu bringen:

Code: Alles auswählen

Dom0:~$ python
Python 2.5.2 (r252:60911, Aug  8 2008, 09:22:44) 
[GCC 4.3.1] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>>exit() 

Dom0:~$ /usr/share/dtc-xen/graph/xenupdate.py /var/lib/rrdtool/
Traceback (most recent call last):
  File "/usr/share/dtc-xen/graph/xenupdate.py", line 29, in <module>
    name,id,mem,cpu,state,cputime=domain
ValueError: need more than 4 values to unpack
nun der Quellcode:

Code: Alles auswählen

#!/usr/bin/python
import sys
import os
import re
import time
from subprocess import Popen,call,PIPE
from glob import glob

def check_call(*args):
	retval = call(*args)
	if retval != 0: raise Exception, "call() failed with error %s: %s"%(retval,args)
	return retval

tabsplitter = re.compile("[\t ]+").split

if len(sys.argv) < 2:
    print "Syntax: %s <rrdbasename> [--test]"%sys.argv[0]
    sys.exit(os.EX_USAGE)

now = "%d"%time.time()
basename = sys.argv[1]
domains = (
		tabsplitter(d.strip())
		for d in Popen(["/usr/sbin/xm","list"], stdout=PIPE).communicate()[0].splitlines()[1:]
		if d.strip()
	)
for domain in domains:

    name,id,mem,cpu,state,cputime=domain[0:6]
...
Ich bin zwar ziemlich fit in Java, habe leider (noch) keine Python Kenntnisse :( Kann mir jemand sagen was in der 29. Zeile schief geht?

Danke schon mal im Voraus! :)

Grüße,
Alex

Verfasst: Samstag 30. August 2008, 16:09
von EyDu
Füge in Zeile 28 mal ein

Code: Alles auswählen

print domain[0:6]
ein, dann wird es dir sicher sofort auffallen.

Verfasst: Samstag 30. August 2008, 17:31
von rtz26
Hallo EyDu,

Danke für die schnelle Antwort!

Code: Alles auswählen

Dom0:~$ /usr/share/dtc-xen/graph/xenupdate.py /var/lib/rrdtool/
['Dom1', '256', '2', '19.3']
Traceback (most recent call last):
  File "/usr/share/dtc-xen/graph/xenupdate.py", line 29, in <module>
    name,id,mem,cpu,state,cputime=domain[0:6]
ValueError: need more than 4 values to unpack
Ich glaube ich weiss nun, woran es liegt. 'xm list' müsste eine 6 Spalten Tabelle ausgeben, wird aber nur 4 (ID und State fehlen) ausspucken, wenn ein Gast nicht gestartet ist:

Code: Alles auswählen

#xm list
Name                                        ID   Mem VCPUs      State   Time(s)
Dom1                                             256     2                19.3
Domain-0                                     0  1977     2     r-----   2865.6

Ich werde versuchen den anderen zwei einen default Wert zuzuweisen. Wenn ich es nicht schaffe, melde ich mich wieder! :P


Danke!

Edit: ich bin mir ziemlich sicher dass es niemanden interessiert, trotzdem hier ist die Lösung:
in die 28. Zeile

Code: Alles auswählen

if domain.__len__()==4 : continue
einfügen.