国产成人精品亚洲777人妖,欧美日韩精品一区视频,最新亚洲国产,国产乱码精品一区二区亚洲

您的位置:首頁技術(shù)文章
文章詳情頁

python - subprocess.Popen執(zhí)行命令后stdout.read()到的信息為空,是路由原因還是自身程序問題?

瀏覽:102日期:2022-06-29 16:58:15

問題描述

下面的代碼是我日常用來監(jiān)測網(wǎng)絡(luò)聯(lián)通性的,昨天之前(截止到前天晚上)都可以獲取到返回的信息,而昨天開始stdout.read()讀到的內(nèi)容就是空。 我直接在CMD窗口ping主機(jī)返回的信息是聯(lián)通的,用call方法取到的返回信息也正常。請大神幫忙解惑

cmd=’ping 10.9.88.69’P=subpross.Popen(cmd,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)reshult=p.stdout.read()

問題解答

回答1:

你這個命令ping 10.9.88.69 在linux環(huán)境下是不會停止的,而且subprocess.Popen默認(rèn)是等待命令結(jié)束才返回結(jié)果,是阻塞的

可以這樣

1.讓ping早點(diǎn)結(jié)束 加多個以參數(shù) -c 指定下ping的次數(shù)

cmd=’ping 10.9.88.69 -c 3’P=subpross.Popen(cmd,stdin=subprocess.PIPE,stdout=subprocess.PIPE,stderr=subprocess.PIPE,shell=True)reshult=p.stdout.read()

2.把阻塞變?yōu)椴蛔枞?/p>

import osimport timeimport fcntlimport subprocesscmd = ’ping 10.9.88.69’p = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE,shell=True)fd = p.stdout.fileno()fl = fcntl.fcntl(fd, fcntl.F_GETFL)fcntl.fcntl(fd, fcntl.F_SETFL, fl | os.O_NONBLOCK)while True: try:line = p.stdout.readline()print(line) except:time.sleep(1)

標(biāo)簽: Python 編程
主站蜘蛛池模板: 银川市| 惠来县| 长阳| 广河县| 永年县| 讷河市| 平遥县| 调兵山市| 甘谷县| 普定县| 通江县| 乌苏市| 禹城市| 淮阳县| 定西市| 石楼县| 方城县| 措勤县| 正蓝旗| 青浦区| 奉节县| 平安县| 上蔡县| 宜兰市| 黄陵县| 鄂托克旗| 焉耆| 迁安市| 宿州市| 会泽县| 临漳县| 河池市| 盐亭县| 乌恰县| 海盐县| 房山区| 梁平县| 马龙县| 苗栗县| 汾西县| 永靖县|