
Cuando uso sudo iotop
(la última versión 0.6-2.el7
) en una terminal en mi CentOS 7.5 recién instalado, aparece el siguiente mensaje de error:
Traceback (most recent call last):
File "/sbin/iotop", line 17, in <module>
main()
File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 620, in main
main_loop()
File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 610, in <lambda>
main_loop = lambda: run_iotop(options)
File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 508, in run_iotop
return curses.wrapper(run_iotop_window, options)
File "/usr/lib64/python2.7/curses/wrapper.py", line 43, in wrapper
return func(stdscr, *args, **kwds)
File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 501, in run_iotop_window
ui.run()
File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 155, in run
self.process_list.duration)
File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 434, in refresh_display
lines = self.get_data()
File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 415, in get_data
return list(map(format, processes))
File "/usr/lib/python2.7/site-packages/iotop/ui.py", line 388, in format
cmdline = p.get_cmdline()
File "/usr/lib/python2.7/site-packages/iotop/data.py", line 292, in get_cmdline
proc_status = parse_proc_pid_status(self.pid)
File "/usr/lib/python2.7/site-packages/iotop/data.py", line 196, in parse_proc_pid_status
key, value = line.split(':\t', 1)
ValueError: need more than 1 value to unpack
¿Alguna idea para solucionar este problema?
Respuesta1
Aparentemente, las versiones recientes del kernel introdujeron una línea en blanco /proc/(pid)/status
que iotop no espera:
CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
Seccomp: 0
SpeculationStoreBypass: vulnerable
Como aproximación cero de una solución, edite (como raíz) /usr/lib/python2.7/site-packages/iotop/data.py
ca l.195:
def parse_proc_pid_status(pid):
result_dict = {}
try:
for line in open('/proc/%d/status' % pid):
if not line.strip(): continue
key, value = line.split(':\t', 1)
result_dict[key] = value.strip()
except IOError:
pass # No such process
return result_dict
donde el if not line.strip(): continue
es nuevo. Tenga en cuenta que Python no tiene llaves explícitas, por lo que la sangría de esta línea debe coincidir con la de la línea debajo de ella.
(Ver tambiénhttps://bugs.launchpad.net/pkg-website/+bug/1773383para otras correcciones para este error.)
Respuesta2
Solo para complementar la respuesta aceptada (no se pudo agregar como comentario porque no permiten múltiples espacios en blanco)
- Busque la ruta del archivo del script Python
sudo find ./usr/lib | grep iotop/data.py
- Reemplazar con sed
sed -i '1n;/key, value = line/i\ if not line.strip(): continue' <script_path>
Ten cuidado y comprueba que todo está bien la primera vez que lo ejecutes.
Para mis sistemas, es:
sudo sed -i '1n;/key, value = line/i\ if not line.strip(): continue' /usr/lib/python2.7/dist-packages/iotop/data.py