Многократная обратная трассировка (последний последний вызов) и ошибка FileNotFoundError при попытке выполнить пинг google.com

#python #sockets #ip #ip-address #traceback

#python #сокеты #ip #ip-адрес #обратная трассировка

Вопрос:

Я пытаюсь создать программу для пинга IP-адресов и т.д. Однако каждый раз, когда я пытаюсь выполнить пинг IP-адреса, я всегда получаю несколько ошибок. Я пробовал несколько разных способов пинга IP-адреса, и ни один из них не работает. Любая помощь будет принята с благодарностью! : D

Мой код:

 import time
import socket
import os
import subprocess

time.sleep(1)

print('    _  __        __')
time.sleep(0.3)
print('  / |/ /__  ___/ /__')
time.sleep(0.3)
print(' /    / _ / _  / -_)')
time.sleep(0.3)
print('/_/|_/___/_,_/__/')

print('nn')

time.sleep(1)

while True:
    prompt = input('>>> ')

    if prompt == '/ip-?':
        print(socket.gethostbyname(socket.getfqdn()))
    elif prompt == '/hn-?':
        print(socket.gethostname())
    elif prompt == '/h':
        print('n/ip-? --- IP ADDRESS')
        print('/hn-? --- HOST NAME')
        print('/e --- EXIT')
        print('n')
    elif prompt == '/ip->':
        #THIS IS WHERE THE PROBLEM IS OCCURING
        out = subprocess.run(['ping', 'google.com'], capture_output=True)
        print(out.stdout.decode())
    elif prompt == '/e':
        break
  

Обратная трассировка:

 Traceback (most recent call last):
  File "D:PYTHONPROJECTSeverything.py", line 33, in <module>
    out = subprocess.run(['ping', 'google.com'], capture_output=True)
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0libsubprocess.py", line 489, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0libsubprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:Program FilesWindowsAppsPythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0libsubprocess.py", line 1307, in _execute_child
    hp, ht, pid, tid = _winapi.CreateProcess(executable, args,
FileNotFoundError: [WinError 2] The system cannot find the file specified
  

Комментарии:

1. Похоже, что программа не может найти программу «ping». Это на ПУТИ?

2. Я просмотрел учебник в Интернете для этой конкретной области кода, и они не показали создание другой программы под названием «ping». Я самоучка, поэтому у меня нет ресурсов, таких как учитель или коллега, которые могли бы помочь мне с подобными вещами, поэтому я пришел к переполнению стека/

3. В данный момент у меня не открыты окна, и я не помню, является ли ping.exe это частью базового дистрибутива Windows. Я думаю , что это так. Можете ли вы запустить ping в командной строке? Вы можете увидеть C:WindowsSystem32ping.exe , существует ли он, и если да, используйте его полное имя пути.

4. Да, теперь это работает! Спасибо: D Если вы хотите оставить это в качестве ответа, я приму его. Еще раз спасибо.

Ответ №1:

ping.exe должно быть в системном каталоге C:WindowsSystem32 . Если не удается запустить без пути, добавьте его. Вы можете использовать косые черты, чтобы избежать потенциальных проблем с использованием python для экранирования специальных символов.

 out = subprocess.run(['C:/Windows/System32/ping', 'google.com'], capture_output=True)
  

Обратите внимание, что это делает вашу программу только Windows. В Linux / Mac также есть программы «ping», поэтому вы можете сделать это резервным вариантом, если простой «ping» не работает. Программа «ping» может иметь разные параметры и выходные данные в зависимости от платформы, поэтому вам может потребоваться сначала проверить версию платформы и реализовать две разные версии вашего кода.