2014-11-10 2 views
1

나는 PolarSSL 라이브러리에서 작업 중이며 일부 테스트를 자동화하려고합니다. PolarSSL은 많은 테스트를 자동화하는 명령 행 실행 파일 (selftest.exe)을 제공하지만 아직 Python 프로그램과 인터페이스하고 싶습니다. 기본적으로, 나는 그 결과를 읽고 추가 조사를 위해 문자열로 저장하고 싶습니다.서브 프로세스와의 상호 작용

selftest.exe이 완료되면 그러나, 그것은 프로그램을 종료 [ENTER]을 눌러 사용자에게 요청하고 사용자가 어떤 그는 결코, [ENTER]를 누를 때까지 영원히 중단 이후 따라서, subprocess.Popen을 통해이 과정을 호출하면, 작동하지 않습니다.

정확히 정확한 시간에 키 스트로크를 보내는 것이 합리적으로 불가능하다고 생각되지만 "XXX 초 후"와 같은 시간 초과에 대해 생각하고 프로세스의 표준 출력을 저장합니다 문자열로 ", XXX는 모든 결과를 갖기에 충분합니다.

그게 가능한 아이디어입니까, 아니면 일반적으로 대화 형 프로그램을 사용하는 "깨끗한"아이디어입니까?

EDIT (평판이 낮아 언급 할 수 없기 때문에) : 첫 번째 대답은 옳았습니다. Enter를 누를 때마다 프로그램이 종료되었습니다. 그러나 p.communicate(input='\n')을 호출하면 다음 오류가 발생합니다. 'str'이 버퍼 인터페이스을 지원하지 않습니다. 대신 에 전화해야합니다.

+0

[process.communicate ('\ n')] (https://docs.python.org/2.6/library/subprocess.html#subprocess.Popen.communicate)를 사용해 보셨습니까? –

+0

@Rawing : 내 편집 참조 :) – EddaSnorra

답변

1

어쩌면 이것은 바보 같은 질문 일 것입니다. 아마도 이미이 작업을 수행했을 것입니다. 그러나 단순히 "\ n"을 프로세스로 보내면 작동하지 않을 것입니까? selftest.exe은 실제로 완료 될 때까지 [ENTER]을 읽지 않을 가능성이 높습니다. 그것은 물론 프로그램이 입력을 읽는 방법에 달려 있습니다. SIGQUIT 또는 SIGTERM을 보내려고해도 일 수도 있고 일 수 있습니다. 프로그램에서 정상적으로 처리합니다.

+0

Windows는 POSIX 신호를 지원하지 않습니다 (C가 필요로하는 6은 제외). 따라서'signals.CTRL_C_EVENT' 또는'signal.CTRL_BREAK_EVENT'를 제외한'signum'에 대한'os.kill (pid, signum)'은 단지'TerminateProcess'를 시도합니다. 그것에 대해 아무 것도 우아합니다. – eryksun

+0

당신 말이 맞아요. 사용자가 Windows에 있다는 것을 잊어 버린 것을 썼을 때 (이는'.exe' 파일에서 분명했습니다), 미안합니다. – Santiago