Уведомления

Группа в Telegram: @pythonsu

#1 Июнь 10, 2011 15:59:54

ijj
От:
Зарегистрирован: 2011-06-10
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

автоматический контроль дискового пространства

Всем привет! По примеру пишу мой первый скриптик, но не могу дописать в виду возникающей ошибки

Посдкажите как исправить ошибку (ValueError: need more than 1 value to unpack) в данной ситуации?


#!/usr/local/bin/python

import os
df_info=os.popen(“df -k /usr |grep -E ^/dev | awk ‘{ print $1, $4 }’”)
format_df=df_info.read().split()
df_info.close()
allow_value=2000000 #2G of disk space

for cycle in format_df:
dev, free=cycle.split()
if int(free)< allow_value:
print ‘Disk space is lower then 2G’ #you can mail this

————————————————————–
# /root/python_scripts/test2.py
Traceback (most recent call last):
File “/root/python_scripts/test2.py”, line 10, in <module>
dev, free=cycle.split()
ValueError: need more than 1 value to unpack



Офлайн

#2 Июнь 10, 2011 16:21:01

Vader
От:
Зарегистрирован: 2010-01-30
Сообщения: 152
Репутация: +  0  -
Профиль   Отправить e-mail  

автоматический контроль дискового пространства

Это значит, что cycle.split() возвращает только одно значение, а вы пытаетесь передать его в 2 переменных dev и free.
Исправить можно обернув в cycle.split() в try/except.



Отредактировано (Июнь 10, 2011 16:21:39)

Офлайн

#3 Июнь 10, 2011 17:13:45

o7412369815963
От:
Зарегистрирован: 2009-06-17
Сообщения: 1986
Репутация: +  32  -
Профиль   Отправить e-mail  

автоматический контроль дискового пространства

вместо os.popen лучше использовать subprocess: пример

Офлайн

#4 Июнь 15, 2011 11:54:58

ijj
От:
Зарегистрирован: 2011-06-10
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

автоматический контроль дискового пространства

Vader
Это значит, что cycle.split() возвращает только одно значение, а вы пытаетесь передать его в 2 переменных dev и free.
Исправить можно обернув в cycle.split() в try/except.
Посмотрел разные примеры использования исключений и сделал своё, но почему то интепретатор ругается на except , не могу понять пчиму (

#!/usr/local/bin/python

import os
df_info=os.popen(“df -k /usr |grep -E ^/dev | awk ‘{ print $1, $4 }’”)
format_df=df_info.read().split()
df_info.close()
allow_value=2000000 #2G of disk space
for cycle in format_df:
try:
dev, free=cycle.split()
if int(free)< allow_value:
except ValueError:
print ‘Disk space is lower then 2G’ #you can mail this



———————————

/root/python_scripts/test2.py: 13 lines, 372 characters.
# /root/python_scripts/test2.py
File “/root/python_scripts/test2.py”, line 12
except ValueError:
^
SyntaxError: invalid syntax



Офлайн

#5 Июнь 15, 2011 13:01:56

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

автоматический контроль дискового пространства

ijj
for cycle in format_df:
try:
dev, free=cycle.split()
if int(free)< allow_value:
except ValueError:
print 'Disk space is lower then 2G' #you can mail this
try-except должны быть на одном уровне.
http://docs.python.org/tutorial/errors.html#handling-exceptions

PS:Но мне кажется проблема не здесь. Если что - покажете содержимое df_info, может что-т подскажется.



Отредактировано (Июнь 15, 2011 13:05:47)

Офлайн

#6 Июнь 15, 2011 14:59:23

ijj
От:
Зарегистрирован: 2011-06-10
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

автоматический контроль дискового пространства

pill
ijj
for cycle in format_df:
try:
dev, free=cycle.split()
if int(free)< allow_value:
except ValueError:
print 'Disk space is lower then 2G' #you can mail this
try-except должны быть на одном уровне.
http://docs.python.org/tutorial/errors.html#handling-exceptions

PS:Но мне кажется проблема не здесь. Если что - покажете содержимое df_info, может что-т подскажется.
У меня ведь except идет после if а там тоже отступ нужен вот и получилось видимо что не на одном уровне. Сделал на одном уровне отругался про отступ

File “/root/python_scripts/test2.py”, line 12
except ValueError:
^
IndentationError: expected an indented block

вывод переменно df_info

<open file ‘df -k /usr |grep -E ^/dev | awk ’{ print $1, $4 }'', mode ‘r’ at 0x2834ef08>


вывод переменной format_df :

test2.py: 8 lines, 210 characters.
# /root/python_scripts/test2.py



Отредактировано (Июнь 15, 2011 15:06:04)

Офлайн

#7 Июнь 15, 2011 15:15:52

pill
От:
Зарегистрирован: 2010-08-27
Сообщения: 223
Репутация: +  0  -
Профиль   Отправить e-mail  

автоматический контроль дискового пространства

Сорри - проморгал )

for cycle in format_df:
try:
dev, free=cycle.split()
if int(free)< allow_value:
print 'Disk space is lower then 2G' #you can mail this
except ValueError:
pass


Если format_df = , зачем вам цикл, и что вы пытаетесь сделать через split?
...
dev, free = format_df
if int(free)< allow_value:
print 'Disk space is lower then 2G' #you can mail this



Отредактировано (Июнь 15, 2011 15:22:25)

Офлайн

#8 Июнь 15, 2011 15:50:13

ijj
От:
Зарегистрирован: 2011-06-10
Сообщения: 10
Репутация: +  0  -
Профиль   Отправить e-mail  

автоматический контроль дискового пространства

pill
Сорри - проморгал )
for cycle in format_df:
try:
dev, free=cycle.split()
if int(free)< allow_value:
print 'Disk space is lower then 2G' #you can mail this
except ValueError:
pass


Если format_df = , зачем вам цикл, и что вы пытаетесь сделать через split?
...
dev, free = format_df
if int(free)< allow_value:
print 'Disk space is lower then 2G' #you can mail this
И то верно.. все работает. без цикла for . Спасибо большое за помощь!



Отредактировано (Июнь 15, 2011 15:50:45)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version