Python subprocess.Popen 하위 프로 세 스 파이프 차단 에 대한 자세 한 설명
1904 단어 PythonsubprocessPopen
하위 프로 세 스 를 사용 하여 큰 로그 파일 을 처리 하고 파일 을 분석 하고 조회 합 니 다.하위 프로 세 스 가 실행 할 출력 결 과 를 기다 리 고 다음 처 리 를 해 야 합 니 다.
문제 코드
# shell
def __subprocess(self,cmd):
try:
# shell ,
p = subprocess.Popen(cmd, shell=True, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
p.wait()
# shell
#rt = p.stdout.read().decode()
# ,
rt_list = rt.strip().split('
')
except Exception as e:
if(DEBUG):
print(traceback.format_exc())
return rt_list
문제 분석하위 프로 세 스 는 일부 데 이 터 를 생 성 합 니 다.버퍼 가 가득 차 면 하위 프로 세 스 의 표준 출력 과 표준 오류 출력 을 기록 합 니 다.이 물건 들 은 파 이 프 를 통 해 부모 프로 세 스에 보 냅 니 다.파이프 가 가득 찬 후에 하위 프로 세 스 는 기록 을 멈 추 었 습 니 다.그래서 멈 추 었 습 니 다.파이프 의 출력 을 제때에 가 져 가면 막 히 지 않 습 니 다.
그러나 저 는 임시 파일 을 사용 하여 하위 프로 세 스 출력 을 받 습 니 다.임시 파일 은 디스크 에 세 워 져 있 기 때문에 size 의 제한 이 없고 파일 이 close 되면 해당 디스크 의 공간 도 방출 됩 니 다.
개 선 된 코드
import tempfile
# shell
def __subprocess(self,cmd):
try:
# , close ,
out_temp = tempfile.TemporaryFile(mode='w+')
#
fileno = out_temp.fileno()
# shell ,
p = subprocess.Popen(cmd, shell=True, stdout=fileno, stderr=fileno)
p.wait()
# shell
out_temp.seek(0)
rt = out_temp.read()
# ,
rt_list = rt.strip().split('
')
except Exception as e:
if(DEBUG):
print(traceback.format_exc())
finally:
if out_temp:
out_temp.close()
return rt_list
이 편 은 Python subprocess.popen 서브 프로 세 스 파이프 차단 에 대한 상세 한 설명 은 바로 편집장 이 여러분 에 게 공유 한 모든 내용 입 니 다.참고 하 시기 바 랍 니 다.여러분 들 도 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
Python의 None과 NULL의 차이점 상세 정보그래서 대상 = 속성 + 방법 (사실 방법도 하나의 속성, 데이터 속성과 구별되는 호출 가능한 속성 같은 속성과 방법을 가진 대상을 클래스, 즉 Classl로 분류할 수 있다.클래스는 하나의 청사진과 같아서 하나의 ...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.