2014-01-20 2 views
1

Привет, я работал над новым скриптом python сегодня, и я столкнулся с этой ошибкой. Я немного запутался в этом, а также стал новым для сценариев. Я не знаю, как определить этот код. Любая помощь будет замечательной. СпасибоRaspberry Pi Python String not Defined

Ошибка

File "newipemail.py", line 25, in <module> 

    text = 'The IP address is: %s' % inet_string 

NameError: name 'inet_string' is not defined 

Script

#!/usr/bin/python 

import subprocess 
import smtplib 
import string 
import time 

FIXED_IP = '10.10.2.10' 

ipaddr_string = 'ip -4 addr > ~/current_ip.txt' 
subprocess.call(ipaddr_string, shell=True) 

ip_file = file('current_ip.txt', 'r') 
for line in ip_file: 
     if 'eth0:' in line: 
      inet_line = ip_file.next() 
      _time = time.asctime() 
      inet_string = inet_line[9:(inet_line.index('/'))] 
      if inet_string != FIXED_IP: 
       print 'Found eth0: %s' % inet_string 

SUBJECT = 'IP Address from Raspberry Pi at: %s' % time.asctime() 
TO = '[email protected]' 
FROM = '[email protected]' 
text = 'The IP address is: %s' % inet_string 
BODY = string.join((
    'From: %s' % FROM, 
    'To: %s' % TO, 
    'Subject: %s' % SUBJECT,'',text), '\r\n') 

server = smtplib.SMTP_SSL('smtp.gmail.com', 465) 
server.login('email.server.com', 'password') 
server.sendmail(FROM, [TO], BODY) 
server.quit() 

ip_file.close() 
+1

Вы уверены, что у вас есть «eth0:» в вашем файле current_ip.txt? – Ernst

+0

Переменная 'inet_string' определяется только в том случае, если вы нашли * eth0: * в своем файле. Ошибка указывает на то, что переменная не определена, что означает, что файл, вероятно, не содержит * eth0: * – bvidal

+1

после строки 'inet_line = ip_file.next()', проверьте, что значение inet_line имеет 'print (inet_line) '. Это даст вам понять, почему 'inet_string' не определен – joaquin

ответ

2

Проблема в том, что для текущего line в current_ip.txt строка eth0: не найдена. Из-за этого ваш if-statement возвращает False.

if 'eth0:' in line: 
    inet_line = ip_file.next() 
    _time = time.asctime() 
    inet_string = inet_line[9:(inet_line.index('/'))] 

Если eth0: находится в line, inet_line определяется, в противном случае она не будет определена и Python переходит к следующему блоку кода, который является, где поднимается исключение.

text = 'The IP address is: %s' % inet_string 
0

Когда я вошел в файл я случайно помещен eth0 как eth1 я изменил его обратно в eth0, и она работала великолепно.

+0

ok, я проголосовал за закрытие вопроса, поскольку вы уже нашли проблему и вызвано ошибкой кодирования – joaquin