python3过滤/管道和重定向Windows函数的输出

2024-10-03 02:43:53 发布

您现在位置:Python中文网/ 问答频道 /正文

ipl = socket.gethostbyname(socket.gethostname())
seg1,seg2,seg3,seg4=ipl.split(".")
ip2 = seg1+"."+seg2+"."+seg3+"."
ip3 = seg1+"."+seg2+"."+seg3+"."

def ipar(ip2):
    seg4=0
    n=5
    while n > seg4:
        seg4=seg4+1
        ip2 += str(seg4)
        os.system("ping -n 1 "+ip2)
        ip2 = ip3

我想过滤只打印成功ping尝试的代码的结果 类似于AWK,linux中的sed

我把代码改了一点,最后一个for循环在第一个变量上停止了,我怎么改的?还有别的方法可以更好地完成这项任务吗?你知道吗

import subprocess
import socket
import sys

ipl = socket.gethostbyname(socket.gethostname())
seg1, seg2, seg3, seg4 = ipl.split(".")
stip = seg1 + "." + seg2 + "." + seg3 + "."

i = 0


def ppout(cmd: str) -> str:
    p = subprocess.Popen(cmd, stdout=subprocess.PIPE)
    while True:
        out = p.stdout.read(1)
        if out == '' and p.poll() != None:
            break
        if out != '':
            sys.stdout.write(out.decode('utf-8'))
            sys.stdout.flush()

for i in range(1, 3):
    cmd = "ping -n 1 " + stip + str(i)
    print(i)
    ppout(cmd)

Tags: importcmdstdoutsyssocketoutpingsubprocess