CentOS पर कमांड iotop के साथ त्रुटि


14

मेरे sudo iotopनवीनतम 0.6-2.el7स्थापित CentOS 7.5 में एक टर्मिनल में (नवीनतम संस्करण ) का उपयोग करते समय , मुझे निम्न त्रुटि संदेश मिलता है:

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

किसी भी विचार कैसे इस समस्या को ठीक करने के लिए?


इससे मेरा काम बनता है। uname: Linux 4.4.0-127-जेनेरिक # 153 ~ 14.04.1-Ubuntu-iotop संस्करण: iotop 0.6 Phyton संस्करण /usr/bin/python2.7
Marko

जवाबों:


32

जाहिरा तौर पर, हाल के कर्नेल संस्करणों ने /proc/(pid)/statusउस आईपोट में एक रिक्त रेखा प्रस्तुत की , जिसकी उम्मीद नहीं है:

CapBnd: 0000001fffffffff
CapAmb: 0000000000000000
Seccomp:    0

SpeculationStoreBypass: vulnerable

फिक्स के शून्य सन्निकटन के रूप में, संपादित करें (रूट के रूप में) /usr/lib/python2.7/site-packages/iotop/data.pyca 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

if not line.strip(): continueनया कहाँ है ध्यान रखें कि अजगर में स्पष्ट ब्रेसिज़ नहीं होते हैं, इसलिए इस रेखा का इंडेंटेशन उसके नीचे की रेखा से मेल खाना चाहिए।

( इस बग के लिए अन्य पृष्ठों के लिए https://bugs.launchpad.net/pkg-website/+bug/1773383 भी देखें ।)


1
यहाँ इस मुद्दे को कवर करने वाले CentOS बग का लिंक दिया गया है: bugs.centos.org/view.php?id=14864
doshea

"पिंपलर" पायथन पैकेज के लिए भी। लाइन 147. if not entry.strip(): continueउस समस्या को हल करने से पहले जोड़ें । pythonhosted.org/Pympler
Eduardo Lucio

2

बस स्वीकृत उत्तर को पूरक करने के लिए (टिप्पणी के रूप में नहीं जोड़ सकते क्योंकि वे कई सफेद रिक्त स्थान की अनुमति नहीं देते हैं)

  1. पायथन लिपि की फ़ाइलपथ की खोज करें
sudo find ./usr/lib | grep iotop/data.py
  1. सेड के साथ बदलें
sed -i '1n;/key, value = line/i\            if not line.strip(): continue' <script_path>

सावधान रहो और सब कुछ ठीक है पहली बार जब आप इसे चलाते हैं।

मेरे सिस्टम के लिए, यह है:

sudo sed -i '1n;/key, value = line/i\            if not line.strip(): continue' /usr/lib/python2.7/dist-packages/iotop/data.py
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.