pexpect는 아이의 표준 출력을 어떻게 분석합니까?

Mergasov

다음 코드가 있습니다.

child = pexpect.spawn("prog")
#some delay...
child.expect(Name .*: )
child.sendline('anonymous')

자식 프로세스가 시작되면 로그 정보와 같은 많은 데이터를 표준 출력으로 보내기 시작할 수 있습니다. pexpect가 모든 자식의 표준 출력을 조회하기 시작한다는 의미입니까 (프로세스 시작부터 현재 순간까지)? 아니면 pexpect가 expect전화를 한 후에 시작 합니까?

내 자식 프로세스는 많은 로그 정보를 만듭니다. 그리고 CPU는 매우 느립니다. 그런 pexpect의 구현이 원인이 될 수 있다고 생각합니다.

pynexj

자식 프로세스가 생성 된 후 자식은 write()데이터를 pty (슬레이브 측)로 보내고 부모가 read()pty (마스터 측)의 데이터를 기다 립니다. 없는 경우 쓰기 버퍼가 가득 차서 너무 많은 데이터를 출력 할 때 child.expect()자식 write()이 차단 될 수 있습니다.

child.expect()패턴과 일치가 돌아갑니다 다음은 호출 할 필요가 child.expect()너무 많은 데이터를 출력 한 후 아이가 여전히 차단 될 수 있습니다 다시 그렇지.

다음 예를 참조하십시오.

# python
>>> import pexpect
>>> ch = pexpect.spawn('find /')
>>> ch
<pexpect.pty_spawn.spawn object at 0x7f47390bae90>
>>>

이때 find가 생성되고 이미 일부 데이터가 출력되었습니다. 그러나 나는 전화하지 않았 ch.expect()으므로 find이제 차단되고 (수면 중) CPU를 소비하지 않습니다.

# ps -C find u
USER     PID %CPU %MEM  VSZ   RSS TTY     STAT START   TIME COMMAND
root  100831  0.0  0.2 9188  2348 pts/12  Ss+  10:23   0:00 /usr/bin/find /
# strace -p 100831
Process 100831 attached
write(1, "\n", 1             <-- The write() is being blocked

여기서 STAT S수면s의미합니다 ( 세션 리더+의미하고 포 그라운드 프로세스를 의미 함 ).


pexpect의 문서에 따르면 두 가지 spawn () 옵션이 성능에 영향을 미칠 수 있습니다.

maxread속성은 판독 버퍼 크기를 설정한다. 이것은 Pexpect가 한 번에 TTY에서 읽으려고 시도하는 최대 바이트 수입니다. maxread크기를로 설정하면 1버퍼링이 해제됩니다. 값을 더 높게 설정하면 maxread많은 양의 출력이 자식에서 다시 읽혀지는 경우 성능에 도움이 될 수 있습니다. 이 기능은와 함께 유용합니다 searchwindowsize.

키워드 인수 searchwindowsizeNone(기본값)이면 들어오는 데이터를 수신 할 때마다 전체 버퍼가 검색됩니다. 각 반복에서 스캔되는 기본 바이트 수는 매우 크고 검색 비용을 부수적으로 줄이기 위해 줄일 수 있습니다 . expect()반환 전체 버퍼 속성은 값에 maxread관계없이 최대 크기로 유지됩니다 searchwindowsize.

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

이 코드는이 출력을 어떻게 표시합니까?

분류에서Dev

scanf () 함수가 표준 출력 스트림에 인쇄하는 이유는 무엇입니까? 이 동작을 어떻게 억제합니까?

분류에서Dev

표준 출력으로의 노드 파이프-배수되었는지 어떻게 알 수 있습니까?

분류에서Dev

ScalaTest는 어설 션 표현식을 어떻게 분석합니까?

분류에서Dev

Excel VBA의 표에 배열을 어떻게 출력합니까?

분류에서Dev

터미널 표준 출력 (stdout)을 클립 보드로 어떻게 파이프합니까?

분류에서Dev

터미널 표준 출력 (stdout)을 클립 보드로 어떻게 파이프합니까?

분류에서Dev

터미널 표준 출력 (stdout)을 클립 보드로 어떻게 파이프합니까?

분류에서Dev

명령의 표준 출력과 표준 입력을 한 줄의 텍스트 파일로 리디렉션하려면 어떻게해야합니까?

분류에서Dev

명령의 표준 출력과 표준 입력을 한 줄의 텍스트 파일로 리디렉션하려면 어떻게해야합니까?

분류에서Dev

Java-Double의 후행 0을 표시하는 출력을 얻으려면 어떻게합니까?

분류에서Dev

신경망의 은닉층에있는 뉴런의 목표 출력을 어떻게 계산합니까?

분류에서Dev

bash 스크립트는 파이프 라인 내에서 표준 출력을 어떻게 작성할 수 있습니까?

분류에서Dev

"time"명령의 출력을 어떻게 해석합니까?

분류에서Dev

corrplot의 출력을 어떻게 해석합니까?

분류에서Dev

표준 출력을 CMD의 프로그램으로 어떻게 리디렉션 할 수 있습니까?

분류에서Dev

어떻게 EDITTEXT의 교류 아이콘을 표시합니까?

분류에서Dev

표준 입력이있는 경우 기다리지 않고 어떻게 캡처합니까?

분류에서Dev

완료, 성공 및 오류 섹션이있는 표준 AJAX 호출은 어떻게해야합니까?

분류에서Dev

xfce : 데드 키가있는 표준 노르웨이어 키보드 레이아웃을 얻으려면 어떻게합니까?

분류에서Dev

xfce : 데드 키가있는 표준 노르웨이어 키보드 레이아웃을 얻으려면 어떻게합니까?

분류에서Dev

MySQL은 어떻게 든 텍스트로 해석되는 바이너리 16 진수 문자열을 출력합니다. 어떻게 작동합니까?

분류에서Dev

ng-required는 표현을 어떻게 해석합니까?

분류에서Dev

특정 영역의 바탕 화면에 아이콘이 표시되는 것을 어떻게 중지합니까?

분류에서Dev

특정 영역의 바탕 화면에 아이콘이 표시되는 것을 어떻게 중지합니까?

분류에서Dev

Busybox의 gzip 출력을 어떻게 구문 분석 할 수 있습니까?

분류에서Dev

Excel에서 비표준 날짜 형식을 어떻게 구문 분석합니까?

분류에서Dev

Objective C이 NSString을 어떻게 구문 분석합니까?

분류에서Dev

이 XML 조각을 어떻게 구문 분석합니까?

Related 관련 기사

  1. 1

    이 코드는이 출력을 어떻게 표시합니까?

  2. 2

    scanf () 함수가 표준 출력 스트림에 인쇄하는 이유는 무엇입니까? 이 동작을 어떻게 억제합니까?

  3. 3

    표준 출력으로의 노드 파이프-배수되었는지 어떻게 알 수 있습니까?

  4. 4

    ScalaTest는 어설 션 표현식을 어떻게 분석합니까?

  5. 5

    Excel VBA의 표에 배열을 어떻게 출력합니까?

  6. 6

    터미널 표준 출력 (stdout)을 클립 보드로 어떻게 파이프합니까?

  7. 7

    터미널 표준 출력 (stdout)을 클립 보드로 어떻게 파이프합니까?

  8. 8

    터미널 표준 출력 (stdout)을 클립 보드로 어떻게 파이프합니까?

  9. 9

    명령의 표준 출력과 표준 입력을 한 줄의 텍스트 파일로 리디렉션하려면 어떻게해야합니까?

  10. 10

    명령의 표준 출력과 표준 입력을 한 줄의 텍스트 파일로 리디렉션하려면 어떻게해야합니까?

  11. 11

    Java-Double의 후행 0을 표시하는 출력을 얻으려면 어떻게합니까?

  12. 12

    신경망의 은닉층에있는 뉴런의 목표 출력을 어떻게 계산합니까?

  13. 13

    bash 스크립트는 파이프 라인 내에서 표준 출력을 어떻게 작성할 수 있습니까?

  14. 14

    "time"명령의 출력을 어떻게 해석합니까?

  15. 15

    corrplot의 출력을 어떻게 해석합니까?

  16. 16

    표준 출력을 CMD의 프로그램으로 어떻게 리디렉션 할 수 있습니까?

  17. 17

    어떻게 EDITTEXT의 교류 아이콘을 표시합니까?

  18. 18

    표준 입력이있는 경우 기다리지 않고 어떻게 캡처합니까?

  19. 19

    완료, 성공 및 오류 섹션이있는 표준 AJAX 호출은 어떻게해야합니까?

  20. 20

    xfce : 데드 키가있는 표준 노르웨이어 키보드 레이아웃을 얻으려면 어떻게합니까?

  21. 21

    xfce : 데드 키가있는 표준 노르웨이어 키보드 레이아웃을 얻으려면 어떻게합니까?

  22. 22

    MySQL은 어떻게 든 텍스트로 해석되는 바이너리 16 진수 문자열을 출력합니다. 어떻게 작동합니까?

  23. 23

    ng-required는 표현을 어떻게 해석합니까?

  24. 24

    특정 영역의 바탕 화면에 아이콘이 표시되는 것을 어떻게 중지합니까?

  25. 25

    특정 영역의 바탕 화면에 아이콘이 표시되는 것을 어떻게 중지합니까?

  26. 26

    Busybox의 gzip 출력을 어떻게 구문 분석 할 수 있습니까?

  27. 27

    Excel에서 비표준 날짜 형식을 어떻게 구문 분석합니까?

  28. 28

    Objective C이 NSString을 어떻게 구문 분석합니까?

  29. 29

    이 XML 조각을 어떻게 구문 분석합니까?

뜨겁다태그

보관