2017-09-07 3 views
0

여전히 프로그램을 계속 사용할 수있는 동안 Python의 서브 프로세스 모듈이 백그라운드에서 실행됩니까?백그라운드에서 서브 프로세스 모듈?

예 : "tail -f * .log"를 하위 프로세스로 사용하고 해당 행을 Python으로 읽어 들인 경우 "꼬리"프로세스와 동시에 다른 작업을 수행 할 수 있습니까? 아니면 다중 스레드가 더 많습니까?

+0

'subprocess.Popen'을 사용하면 다른 프로세스가 실행되고 부모 프로세스를 즉시 제어 할 수 있습니다. 아마 당신이 원하는 것. –

+0

[백그라운드에서 서브 프로세스 실행] 가능한 복제본 (https://stackoverflow.com/questions/32577071/execute-subprocess-in-background) – tima

답변

0

subprocess.check_output은 자식 프로세스가 종료 될 때까지 기다린 다음 출력합니다.

subprocess.Popen 원하는 것을 수행합니다.

proc = subprocess.Popen(['/usr/bin/tail', '-f', '*.log'], stdout=subprocess.PIPE, shell=True) 

* .log의 와일드 카드가 해석되도록하려면 shell = True가 필요합니다. 그렇지 않다면 쉘이 필요 없을 것입니다. shell = True로 Popen에 인수를 전달할 때주의하십시오. 인수가 사용자가 제공하는 경우 이는 보안 위험이 될 수 있습니다. 일반적으로 쉘을 필요로하지 않는 방법을 찾는 것이 좋습니다. 파이썬을 사용하여 로그 파일 목록을 작성한 다음 목록 요소를 추가 인수로 전달하면됩니다.

stdout = subprocess.PIPE는 꼬리의 출력을 읽을 수있는 방법입니다. proc.stdout을 통해 액세스하고 일반 파일 에서처럼 읽을 수 있습니다.

그러나 파이프의 버퍼가 테일 프로세스를 채우지 못하도록 블록을 주기적으로 수행해야하기 때문에 읽기가 다소 까다로울 수 있습니다. 한 가지 방법은 테일의 출력을 큰 버퍼로 읽는 것 외에는 아무것도하지 않는 스레드를 시작하는 것입니다.

관련 문제