Эта функция работает в любой ОС (Unix, Linux, macOS и Windows)
Python 2 и Python 3
редактирует:
На @ radato os.system
был заменен subprocess.call
.
By @ Boris В документации рекомендуется использовать subprocess.run()
, если вы используете Python 3.5 +.
import platform # For getting the operating system name
import subprocess # For executing a shell command
def ping(host):
"""
Returns True if host (str) responds to a ping request.
Remember that a host may not respond to a ping (ICMP) request even if the host name is valid.
"""
# Option for the number of packets as a function of
param = '-n' if platform.system().lower()=='windows' else '-c'
# Building the command. Ex: "ping -c 1 google.com"
command = ['ping', param, '1', host]
return subprocess.call(command) == 0
Обратите внимание, что, согласно @ikrase в Windows, эта функция все равно вернет True
, если вы получите ошибку Destination Host Unreachable
.
Объяснение
Команда ping
как в Windows, так и в Unix-подобных системах.
Опция -n
(Windows) или -c
(Unix) контролирует количество пакетов, которое в этом примере было установлено на 1.
platform.system()
возвращает имя платформы. Ex. 'Darwin'
в macOS.
subprocess.call()
выполняет системный вызов. Ex. subprocess.call(['ls','-l'])
.