Я пытаюсь написать сценарий, который проверяет, включен ли хост в моей интрасети. если да, подождите 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
возможно дубликат [Назначение вывода os.system переменной и предотвратить ее на экране] (http://stackoverflow.com/questions/3503879/assign-output-of-os- system-to-a-variable-and-prevent-it-from-being-отображается-on) – alfasin
что? это даже не относится к моей проблеме. –
Вы забыли называть 'main()' внутри своего скрипта? – Himal