我已经编写了以下代码并且它正在运行:
#!/usr/bin/python
from os import system
import ipaddress
hostname = ipaddress.ip_address(str(input("Please Enter An IP Address : ")))
response = system("ping -c 1 " + str(hostname))
if response ==0:
print ("System is UP")
else :
print ("System is DOWN")
在运行以下命令时,我得到以下结果,这些结果很好但我不需要ping任何乱码输出。
请输入IP地址:8.8.8.8 PING 8.8.8.8(8.8.8.8)56(84)字节的数据。 来自8.8.8.8的64字节:icmp_seq = 1 ttl = 64 time = 0.039 ms
--- 8.8.8.8 ping统计--- 1个包传输,1个接收,0%丢包,时间0ms rtt min / avg / max / mdev = 0.039 / 0.039 / 0.039 / 0.000 ms系统已启动
我如何在其他文件或dev / null中重定向以下输出:
PING 8.8.8.8(8.8.8.8)56(84)字节的数据。从8.8.8.8开始的64个字节: icmp_seq = 1 ttl = 64 time = 0.039 ms
--- 8.8.8.8 ping统计--- 1个包发送,1个接收,0%丢包,时间0ms rtt min / avg / max / mdev = 0.039 / 0.039 / 0.039 / 0.000 MS
只接收 系统通过运行脚本将UP结果作为输出。
请帮忙。
答案 0 :(得分:0)
您可以使用子进程。在这里查看我的示例python 3.6代码:
$ cat main.py
import subprocess
def main():
host = input('Host? ')
proc = subprocess.Popen(['ping', '-c', '1', host], stdout=subprocess.PIPE, stderr=subprocess.PIPE)
stdout, stderr = proc.communicate()
print(f'stdout: {stdout}\nstderr: {stderr}\nreturn: {proc.returncode}')
if __name__ == '__main__':
main()
使用subprocess.Popen()创建进程,然后使用proc.communicate()执行它。这将返回一个包含stdin和stderr内容的元组。在您的情况下,您可以放弃此并仅使用proc.returncode:如果它为0,则ping已成功完成。
$ python main.py
Host? 8.8.8.8
stdout: b'PING 8.8.8.8 (8.8.8.8) 56(84) bytes of data.\n64 bytes from 8.8.8.8: icmp_seq=1 ttl=59 time=30.3 ms\n\n--- 8.8.8.8 ping statistics ---\n1 packets transmitted, 1 received, 0% packet loss, time 0ms\nrtt min/avg/max/mdev = 30.355/30.355/30.355/0.000 ms\n'
stderr: None
return: 0
$ python main.py
Host? localhorst
stdout: b''
stderr: b'ping: localhorst: Der Name oder der Dienst ist nicht bekannt\n'
return: 2