尝试ping google.com时出现多次回溯(最近一次通话最近)和FIleNotFoundError

时间:2020-10-21 19:46:27

标签: python sockets ip ip-address traceback

我正在尝试编写用于ping IP地址等的程序。但是,每次我尝试ping IP地址时,我总是会遇到多个错误。我尝试了多种不同的方法来ping 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('\n\n')

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:\PYTHON\PROJECTS\everything.py", line 33, in <module>
    out = subprocess.run(['ping', 'google.com'], capture_output=True)
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\lib\subprocess.py", line 489, in run
    with Popen(*popenargs, **kwargs) as process:
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\lib\subprocess.py", line 854, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "C:\Program Files\WindowsApps\PythonSoftwareFoundation.Python.3.8_3.8.1776.0_x64__qbz5n2kfra8p0\lib\subprocess.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 个答案:

答案 0 :(得分:0)

ping.exe应该在系统目录C:\WindowsSystem32中。如果无法在没有路径的情况下运行,请添加它。您可以使用正斜杠来避免python使用\来转义特殊字符的潜在问题。

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

请注意,这仅使您的程序窗口。 Linux / Mac也具有“ ping”程序,因此,如果简单的“ ping”不起作用,则可以使其退后。根据平台的不同,“ ping”程序可能具有不同的参数和输出,因此您可能需要首先检查平台版本,并实现两个不同版本的代码。