2015-01-05 4 views
0

몇 밀리 초마다 bash 명령을 호출 할 수 있어야합니다. 이렇게하려면 하위 프로세스를 사용하려고합니다. 현재 다음을 사용합니다 :여러 하위 프로세스를 순차적으로 호출

p = subprocess.Popen(command, universal_newlines=True, cwd=CurrentWorkingDirectory ,shell=True, stdout=subprocess.PIPE) 

그리고 필요한 시간에 명령을 실행하는 타이머가 있습니다.

제 질문은 subprocess.Popen을 사용하여 이러한 명령을 호출하는 경우 각 명령을 실행하기 위해 새 터미널을 여는 것입니까? 나는 수천 개의 명령을 호출 할 것이기 때문에 메모리 사용 문제가 발생하지 않도록하고 싶다.

이 문제를 해결하는 가장 좋은 방법은 무엇입니까?

+0

혹시 실제로 메모리를 다 써 버린 적이 있습니까? – user3684792

+0

왜 새 터미널을 여실 건가요? –

+0

아직 테스트 할 수 없지만 각 명령에서 드라이버 프로그램을 실행할 예정입니다. 나는 "subprocess.Popen"의 각 후속 호출이 백그라운드에서 실행되기 때문에 새로운 터미널을 열지 않을지 확신하지 못한다 ... 만약 그들이 쌓일 지 궁금하다. 이. – TWagner

답변

0

당신이 무엇을 하든지, 메모리 부족 여부와 상관없이 1 분에 수천 개의 프로세스를 시작하는 것보다 더 나은 대안이있을 수 있습니다.

서브 프로세스를 순차적으로 실행하려면 subprocess.Popen 대신 subprocess.check_call을 사용하십시오.

각 명령을 실행하기 위해 새 터미널을 여는 중입니까?

아니요, 명령 자체가 새 터미널을 시작하지 않는 한 아니오.

+0

감사합니다. check_call을 시도해 보겠습니다. 명령이 끝나기를 기다리는가? 이러한 외부 프로그램이 생성되는 동안 계속할 프로그램이 필요합니다 ... – TWagner

+0

링크를 클릭하십시오. 문서로 연결됩니다. 전용 스레드를 사용하여 나머지 프로그램을 차단하지 않도록 하위 프로세스를 생성하십시오. – jfs

0

터미널 열기에 대한 질문에 대답하려면 기본 bash 스크립트가 터미널 탭이나 다른 것을 명시 적으로 실행하지 않는 한 발생하지 않습니다. 메모리 사용에 관한 질문에 관해서는, 호출하는 기본 스크립트와 순차적 또는 동시 방식으로 수행하는지 여부에 전적으로 달려 있습니다. 약간의 설명이 도움이 될 것 같아요!

+0

그래서 나는 터미널을 통해 [python3 '프로그램'blah blah blah]를 사용하여 실행해야하는 드라이버 프로그램을 실행 중입니다. ... 명령으로 ... "subprocess.Popen"의 순차 호출이 될 것입니다. 17 초마다 최대 몇 분 동안이 작업을 수행합니다. 그래서 내 프로그램은 subprocess.Popen (newCommand) – TWagner

+0

을 사용합니다. 그렇다면 완전히 시작하는 드라이버 프로세스의 CPU 및 메모리 사용량에 달려 있습니다. 파이썬에는 프로그램에 부과되는 자체 메모리 제한이 없으므로 시스템의 한계를 초과 할 때까지 이동합니다. – wilkesybear

+0

그래, 실행중인 동일한 터미널 창에 순차적 명령을 보낼 수있는 방법이 있습니까? 백그라운드에서?아니면 일단 프로그램이 끝나면이 열린 터미널이 종료됩니까? – TWagner