2011-10-27 1 views
1

하위 프로세스를 통해 호출하는 별도의 프로그램으로 작성된 로그 파일의 내용을 GUI에 표시하는 응용 프로그램을 빌드하려고합니다. 응용 프로그램은 Windows에서 실행되며 제어 할 수없는 이진 파일입니다. 또한,이 애플리케이션 (누군가 신경 쓰면 Actel Designer)은 하위 프로세스의 출력을 리디렉션하는 방법과 상관없이 로그 파일에 출력을 쓸 것이므로 출력용 파이프를 사용하는 것이 옵션이 아닌 것 같습니다. 요점은 다른 스레드가 쓰고있는 동시에 로그 파일에서 읽는 것을 강요받는 것 같습니다. 내 질문은 강력한 방법으로 GUI의 로그 파일의 내용을 최신으로 유지할 수있는 방법이 있다면?다른 스레드가 소유 한 파일을 표시하는 방법은 무엇입니까?

나는 해봤 다음

아이 프로세스가 실행되는 동안 순진 주기적으로 읽기 위해 파일을 열
  1. 파이썬은 자식 스레드가 파일에 쓰기 때문에 (내가 추측하고있어 충돌을 일으 킵니다 그 동안 내용을 읽으려고합니다.)
  2. 다음으로 GENERIC_READ 및 SHARED_READ를 사용하여 하위 프로세스를 호출하기 전에 로그 파일에 대한 파일 핸들을 열려고했습니다. SHARED_WRITE | SHARED_DELETE 및 해당 파일에서 다시 읽습니다. 이 방법을 사용하면 파일이 비어있는 것처럼 보입니다.

도움을 주셔서 감사합니다. 저는 전문 프로그래머가 아니며 일주일 내내 제 머리카락을 꺼내 ​​왔습니다.

+0

그래서 로그 파일을 생성하는 스레드는 파일이 업데이트되는 시점을 제어합니다. 이 경우, 읽기 스레드가 파일을 읽는 동안 수행중인 작업을 일시 중지하도록 업데이트 스레드를 가져온 다음, 읽기 스레드에서 파일을 닫고 업데이트 스레드를 다시 업데이트하십시오. 또 다른 생각 : 파일을 세 번째 스레드가 소유하고 첫 번째 두 개의 스레드에서 필요한 세 번째 스레드를 요청하십시오. – Oliver

+0

로그 파일은 제어 할 수없는 타사 소프트웨어에서 생성됩니다.이 파일은 컴퓨터의 .exe 파일입니다. 명령 행 (또는 서브 프로세스)에서 실행되면 즉시 다른 스레드가 생성됩니다. 그것은 당신이 설명하는 것처럼 그 생성 된 스레드를 제어해야 할 것 같은데, 나는 그것을 달성 할 수있는 방법을 보지 못했다. (비록 제안이 열려있다.) –

답변

1

tail -f (파일 번호 strace tail -f logfile을 실행하여 어떤 시스템 호출이 사용되는지 확인할 수 있음)에 대한 알림을 등록해야합니다.

pyinotify은 이러한 파일 변경 알림을위한 Python 인터페이스를 제공합니다.

+0

제안에 감사드립니다! 필자는 pyinotify가 Windows에서 작동한다고 생각하지 않지만 Watchdog (http://packages.python.org/watchdog/)과 비슷한 것을 수행하는 다른 모듈을 찾았습니다. 이 방법을 사용하는 법을 배우는 방법을 배울 것입니다. –

+1

파일 알림 기반 솔루션 (Watchdog)을 사용하면 문제가 해결됩니다. –

관련 문제