久久r热视频,国产午夜精品一区二区三区视频,亚洲精品自拍偷拍,欧美日韩精品二区

您的位置:首頁技術文章
文章詳情頁

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

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

問題描述

下面的代碼是我日常用來監測網絡聯通性的,昨天之前(截止到前天晚上)都可以獲取到返回的信息,而昨天開始stdout.read()讀到的內容就是空。 我直接在CMD窗口ping主機返回的信息是聯通的,用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環境下是不會停止的,而且subprocess.Popen默認是等待命令結束才返回結果,是阻塞的

可以這樣

1.讓ping早點結束 加多個以參數 -c 指定下ping的次數

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.把阻塞變為不阻塞

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)

標簽: Python 編程
主站蜘蛛池模板: 锡林浩特市| 万安县| 峨边| 吉木萨尔县| 清丰县| 南漳县| 咸丰县| 滁州市| 乌海市| 彭水| 临沭县| 滦平县| 渭南市| 丘北县| 南京市| 绵竹市| 乡宁县| 宜城市| 都匀市| 武安市| 扶余县| 鄄城县| 新余市| 醴陵市| 黄大仙区| 金坛市| 石景山区| 潜山县| 高邑县| 银川市| 青海省| 家居| 同心县| 治县。| 甘南县| 浪卡子县| 兴和县| 克什克腾旗| 新绛县| 新干县| 乌兰察布市|