我想ping
从Python调用并获取输出。我尝试了以下方法:
response = os.system("ping "+ "- c")
但是,这会打印到控制台,我不需要。
PING 10.10.0.100 (10.10.0.100) 56(86) bytes of data.
64 bytes from 10.10.0.100: icmp_seq=1 ttl=63 time=0.713 ms
64 bytes from 10.10.0.100: icmp_seq=2 ttl=63 time=1.15 ms
有没有一种方法可以不打印到控制台而仅获得结果?
要获取命令的输出,请使用subprocess.check_output
。如果命令失败,它将引发错误,因此将其放在一个try
块中。
import subprocess
try:
response = subprocess.check_output(
['ping', '-c', '3', '10.10.0.100'],
stderr=subprocess.STDOUT, # get all output
universal_newlines=True # return string not bytes
)
except subprocess.CalledProcessError:
response = None
若要用于ping
了解地址是否正在响应,请使用其返回值,该值为0表示成功。subprocess.check_call
如果返回值不为0,则将引发并出错。要抑制输出,请重定向stdout
和stderr
。使用Python 3,您可以使用subprocess.DEVNULL
而不是在一个块中打开空文件。
import os
import subprocess
with open(os.devnull, 'w') as DEVNULL:
try:
subprocess.check_call(
['ping', '-c', '3', '10.10.0.100'],
stdout=DEVNULL, # suppress output
stderr=DEVNULL
)
is_up = True
except subprocess.CalledProcessError:
is_up = False
通常,使用subprocess
调用(如文档所述)旨在替换os.system
。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句