在python3中重定向不需要的输出

时间:2018-02-21 13:13:06

标签: python linux python-3.x

我已经编写了以下代码并且它正在运行:

#!/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结果作为输出。

请帮忙。

1 个答案:

答案 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