pywin32 확장을 사용하여 Python에서 win32 API에 액세스합니다. 필자는 Python으로 윈도우 프로그래밍을 할 때 새로운데, 나는 POSIX 사람이다. 그래서 나는 골치가 아픈 방식으로 일을하고 있을지 모른다.파이프에서 출력을 얻기 위해 win32file.ReadFile을 사용하는 올바른 방법은 무엇입니까?
win32file.ReadFile 함수를 올바르게 사용하려고하는데 가능한 결과 코드를 해석하는 데 문제가 있습니다.
나는 이런 식으로 함수를 호출 해요 : 내가 시작 자식 프로세스의 출력을 읽고 있어요
result, data = win32file.ReadFile(child_stdout_r, 4096, None)
. 좋은 데이터를 얻지 만 4096 자보다 파이프에 더 많은 데이터가있을 수 있습니다. (그리고 그냥 임의로 큰 버퍼 크기를 선택하는 대신 차라리이 작업을 수행 할 것입니다.)
4096자가 넘는 경우 읽을 때까지 win32file.ReadFile을 여러 번 실행해야합니다. 파이프. ReadFile을 여러 번 실행해야하는지 여부를 확인하려면 결과 코드를 해석해야합니다.
ActiveState docs는 말할 :
그 결과의 튜플 (HR, 문자열/PyOVERLAPPEDReadBuffer) 시간이 0 또는 ERROR_MORE_DATA ERROR_IO_PENDING 될 수있다.
함수 호출에서 겹쳐진 값을 None으로 설정했기 때문에 PyOVERLAPPEDReadBuffer 항목에 대해 걱정할 필요가 없습니다. (I 유효한 데이터를 얻고 있기 때문에, 나는 내가 옳다 생각합니다.)
내가 시간 결과 변수를 두 가지 문제가 있습니다
- 내가 상수 ERROR_MORE_DATA의 값을 찾을 수 없거나을 어디에서나 ERROR_IO_PENDING.
- ActiveState 문서는 0이 성공하고 상수가 무엇이든 실패를 나타냅니다. Microsoft docs 상태는 0은 실패를 나타내고 0이 아닌 값은 성공을 나타내며 더 자세히 알려면 GetLastError를 실행해야합니다.
어떻게해야할까요?
추가 할 항목 : 내가 만든 작업 개체에 하위 프로세스를 추가해야하므로 하위 프로세스를 사용하지 않습니다. 목표는 상위 프로세스가 종료 될 경우 모든 하위 프로세스가 즉시 종료되도록하는 것입니다. 작업 개체에 자식 프로세스를 추가하면 작업 개체에 대한 마지막 핸들이 닫힐 때 자식 프로세스가 종료됩니다. 부모가 보유한 핸들은 부모가 종료 할 때 닫힙니다. 이 모든 것은 내가 말할 수있는 한, 하위 프로세스를 사용하지 못하게합니다.
당신을 사랑한다고 생각합니다. ;-) 감사! – Schof
나는 그것이 나를 위해 처음으로 인정해야합니다. Blush ;-) – jdigital