ValueError: need more than 4 values to unpack

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
rtz26
User
Beiträge: 2
Registriert: Samstag 30. August 2008, 15:36

Samstag 30. August 2008, 15:59

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
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Samstag 30. August 2008, 16:09

Füge in Zeile 28 mal ein

Code: Alles auswählen

print domain[0:6]
ein, dann wird es dir sicher sofort auffallen.
rtz26
User
Beiträge: 2
Registriert: Samstag 30. August 2008, 15:36

Samstag 30. August 2008, 17:31

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.
Antworten