2012-03-01 3 views
0

직렬 포트를 통해 Linux 시스템과 상호 작용하는 프로그램을 작성하고 있습니다. 주 통신 채널로 pexpect.spawn을 다음과 같이 사용하고 있습니다.주어진 문자열로 각 STDERR을 미리 보류 할 수 있습니까?

proc = pexpect.spawn("cu dir -l /dev/ttyUSB0 -s 115200", logfile = *someFile*) 

그리고 sendline ("cmd") 메서드로 컴퓨터에 명령을 보내고 각 세션이 끝날 때 로그 파일을 구문 분석하여 명령이 어떻게 작동하는지 확인합니다.

로그 파일에서 stdout 및 stderr로 인쇄 된 줄을 구분할 수 있기를 원하지만 현재는 그렇게 할 방법이 없습니다. stderr에 인쇄 된 각 행 앞에 주어진 문자열을 전역으로 추가하는 방법입니까?

답변

0

stdout과 stderr를 캡처하는 방법은 언급하지 않지만 stdout과 stderr를 구별하는 간단한 방법은 단순히 stdout과 stderr을 다른 파일에 배치하는 것입니다. 예를 들어 :

는 ./command.py> 나는이 pexpect의 한계라고 생각

+0

나는 pexpect.spawn이 제공하는 로그 파일을 통해 그것들을 '캡처'합니다. 명령은 다른 컴퓨터에서 실행되기 때문에 두 컴퓨터간에 파일을 전송할 수 없기 때문에 파일에 저장할 수 없습니다. – EagerToLearn

+0

기다려, cu 또는 명령의 인스턴스에서 stdout/stderr을 캡처하려고합니까? 원격 리눅스 머신에서 실행 되나요? – Perry

+0

원격 리눅스 컴퓨터에서 실행중인 명령에서 내 질문에 명확하지 않은 경우 미안합니다 – EagerToLearn

0

를 표준 에러 로그> (2)를 표준 출력-로그인합니다. 기본적으로 블랙 박스 명령 프롬프트를 다루고 있기 때문에 pexpect는 콘솔에 반환 된 문자열이 stdout인지 stderr인지에 대해 알지 못한다. 정규식 기반의 후 처리기를 작성할 수 있도록 시스템에서 제한된 일련의 메시지 및 오류 형식을 안전하게 가정 할 수 있습니까?

+0

불행하게도, 시스템은 임의의 명령 세트로 작업해야합니다 – EagerToLearn