2014-10-26 2 views
2

Я пытаюсь написать сценарий, который проверяет, включен ли хост в моей интрасети. если да, подождите 10 секунд и повторите тест. если он выключен, отправьте по часам по lan-пакету на хост, затем снова проверьте за 10 секунд. Код компилируется, но, похоже, не работает. Любая помощь приветствуется.Python Wake On Lan

import os 
import socket 
def main(): 
    hostname = "10.0.0.5" 
    response = os.system("ping -c 1 " + hostname) 
    if response == 0: 
     print ("Host " + hostname + "is up.") 
     Time.Sleep(10) 
     main() 
    else:   
     print("Host " + hostname + "is down.") 
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
     s.sendto('\xff'*6 + '\x00\x21\x6A\xC7\x1A\x42'*16, ('10.0.0.5', 80)) 
     Time.Sleep(10) 
     main() 

Обновление: я изменил, если условно к = с 10.0.0.5 хосту, чтобы проверить, если он посылает пакет, и это не это (подтверждено с помощью Wireshark!). Я не знаю, работает ли даже мой код tbh.

Нового код, кажется, работает, только проблема в том, что она игнорирует time.sleep и просто повторять один раз пинг заканчивает

import os 
import socket 
import subprocess 
import time 
from time import sleep 
x = 0 
while x < 1: 
     hostname = "10.0.0.5" 
     output = subprocess.Popen(["ping.exe",hostname],stdout = subprocess.PIPE).communicate()[0] 
if ('unreachable' in output): 
     print hostname, 'is down.' 
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
     s.sendto('\xff'*6 + '\x00\x21\x6A\xC7\x1A\x42'*16, ('10.0.0.255', 80)) 
     time.sleep(10) 
else: 
     print hostname, 'is up.' 
     time.sleep(10) 
x = x + 0 
+0

возможно дубликат [Назначение вывода os.system переменной и предотвратить ее на экране] (http://stackoverflow.com/questions/3503879/assign-output-of-os- system-to-a-variable-and-prevent-it-from-being-отображается-on) – alfasin

+1

что? это даже не относится к моей проблеме. –

+0

Вы забыли называть 'main()' внутри своего скрипта? – Himal

ответ

0

Углубление выключено в вашем обновленном code.also, ищет «недостижимы» в выходе не было бы лучшей вещью, чтобы сделать. Что, если она была приурочена или показала еще одну ошибку? вместо этого я бы использовал код возврата.

Вот обновленная версия. Обязательно сохраните отступы.

import os 
import time 
import socket 
import subprocess 

hostname = "10.0.0.5" 

while 1: 
    sp = subprocess.Popen(["ping.exe", hostname], stdout = subprocess.PIPE) 

    sp.wait() # Wait for ping.exe to terminate. 

    return_code = sp.returncode # Get the return code 

    if return_code != 0: 
     print hostname, 'is down.' 
     s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) 
     #I'm not that familiar with this part.assuming yours is correct. 
     s.sendto('\xff'*6 + '\x00\x21\x6A\xC7\x1A\x42'*16, ('10.0.0.255', 80)) 
    else: 
     print hostname, 'is up.' 

    time.sleep(10) # Sleep for 10 seconds 
Смежные вопросы