我正在尝试编写一个脚本,以检查我的intranet上的主机是否已启动。如果是,请等待10秒,然后再测试一次。如果已关闭,请将局域网数据包上的唤醒发送到主机,然后在10秒内再次测试。代码编译,但似乎不起作用。任何帮助都是非常感谢的。
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主机,我将if条件更改为!=,以测试它是否正在发送数据包,但没有(通过确认)。我不知道它是否在运行我的代码tbh。
新代码似乎起作用了,唯一的问题是它忽略了time.sleep,只是在ping完成后重复
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发布于 2014-10-27 01:46:05
在更新的code.also中,缩进是关闭的,在输出中寻找“不可访问的”对于do.what来说不是最好的选择,如果它超时或显示了另一个错误?我会用返回代码代替。
下面是一个更新的version.make,一定会保留缩进。
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 secondshttps://stackoverflow.com/questions/26570440
复制相似问题