과제는 다음과 같습니다 : "ping 8.8.8.8"과 같은 가장 기본적인 형식을 사용하여 파이썬으로 핑을 보내보십시오. 얼마 후 ping 명령을 종료하십시오 (터미널에서 Ctrl + C를 눌러서 출력을 얻습니다). ping 통계를 보여주는 마지막 몇 줄의 출력은 특히 중요합니다.무한정한 시간 동안 ping을하고 파이썬에서 출력을 얻으십시오.
두 가지 방법이 시도했지만 작동하지 않았습니다. 내 OS 버전은 Mac OS X 10.10.1입니다.
첫 번째 방법은 모듈 pexpect를 사용하고, 나는 중지를 요청하지 않았지만 핑은 약 17 초 후에 중지됩니다 :
import pexpect
import time
child = pexpect.spawn('ping 8.8.8.8')
(x, y) = child.getwinsize()
print x
print y
time.sleep(21)
child.terminate()
x = child.read()
print x
두 번째 방법은 모듈의 하위 프로세스 및 핑 출력의 마지막 몇 줄의 손실을 사용합니다 :
import time
from subprocess import PIPE, Popen
child = Popen(['ping', '8.8.8.8'], stdin = PIPE, stdout = PIPE, stderr = PIPE)
time.sleep(5)
child.terminate()
x = child.stdout.read()
print x
x = child.stderr.read()
print x
나는 어떤 도움을 주셔서 감사합니다! "ping -c XXX"는 허용되지 않습니다.
관련 : [? 중지하지 않고 파이썬에서 프로세스 출력을 읽는 중지] (http://stackoverflow.com/a/4418891/4279)가 첫 번째 방법이 실패 – jfs
이유가 있기 때문입니다 당신은 출력을 읽을 필요 pty 버퍼가 너무 작기 때문에, 출력을 버퍼 밖으로 이동시키기 위해 readline()을 계속 사용해야합니다. – brokenMotor