首页 > 解决方案 > 如何正确获取 subprocess.run() 的结果?

问题描述

很抱歉再次询问这个问题,但我一直无法找到一种方法来消除不断发生的误报。

当我收到“无法到达目的地”的回复时,它显示所有返回的数据包和 0 个数据包丢失......所以它显示 SERVER UP 而不是 down。

我怎么能绕过这个?

# Server up/down Script

# - Module Import section
import socket
import sys
import os
import subprocess

# - IP Address input request
hostname1 = input (" Please Enter IP Address: ")

# - Command to run ping request, but also hides ping info
response = subprocess.run(["ping", "-c", "1", hostname1], stdout=subprocess.PIPE)
response.returncode

#___ ORIGINAL CODE ___
#if (response == "Reply from", hostname1):
if response.returncode == 0:
    print ( 50 * "-")
    print ("[ **SERVER IS ALIVE** ]")
    print ( 50 * "-")
elif response.returncode == 0 and (str("Destination host unreachable.")):
    print( 50 * "-")
    print(hostname1, "[ **SERVER DOWN** ] ")
    print( 50 * "-")
else:
    print( 50 * "-")
    print(hostname1, "[ **SERVER DOWN** ] ")
    print( 50 * "-")

标签: pythonsubprocessping

解决方案


(str("Destination host unreachable.")您在代码中的表达式将始终评估为True— 任何非空字符串的真实性。

如果要查看特定字符串是否在stdout调用的子进程产生的输出中,则需要使用如下表达式:

("Destination host unreachable." in response.stdout.decode("utf-8"))

通话后response = subprocess.run(...)

这是一篇描述如何使用该subprocess模块的文章(特别注意捕获输出部分。


推荐阅读