2010-04-21 5 views
0

파이썬에서 C/C++ 프로그램을 Popen으로 호출하고 있습니다. 파이썬 코드는 자식 프로세스의 동작을 관찰하고 자신의 작업에 대한 데이터를 수집해야합니다.파이썬/자식 프로세스에서 다른 프로세스를 호출 할 때 셸에 액세스해야합니다

문제는 C 코드가 이미 일부 셸 명령을 호출하는 데 파이프를 사용한다는 것입니다. 따라서 Python에서 실행 한 후 C 프로그램은 bash 셸 명령을 실행할 수 없습니다.

Popen에서 호출하여 자식 프로세스가 쉘에서 자신의 파이프 명령을 실행하도록 지정하는 방법이 있습니까 ???

나는 shell = True로 시도했지만 도움이되지 않습니다!

+0

당신은 "관찰"무엇을 의미합니까? 하위 프로세스가 stdout을 사용하여 다른 하위 프로세스와 대화하는 경우이를 사용하여 상위 프로세스와 대화 할 수 없습니다. 아마도 stderr를 사용합니다. 자세한 정보를 제공해주십시오. –

+0

Ok, 하위 (c 코드)가 개발되었으며 이미 수퍼 프로세스 (셸)와 이야기하기 위해 stdout을 사용합니다. 이제 파이썬은 단지 자식을 호출해야하고, stderr에 기록한 것을 수집하지만, 일부 쉘 명령어를 실행하기 위해서는 여전히 슈퍼 슈퍼 프로세스 (쉘)와 대화 할 수 있어야합니다. – dexter

+0

나는 당신이하려는 일에 막 모호하다. 나는 C 프로그램이 쉘에 stdout을 보내는 것이 실제로 무엇을 의미 하는지를 말할 때 화면에 출력된다는 것을 의심한다. 나는 또한 당신이 파이프를 다루는 많은 API가 같은 시간에 같은 프로그램 (파이프 라인)을 파이프하는 것을 허용하지 않는다는 사실을 알고 있다고 생각한다. 파이썬 API가 어떻게 생겼는지는 모르겠지만, 여기에는 이유가 있으며 저수준 함수를 사용하여 C에서이 문제를 해결할 수있는 방법이 있습니다. 명령 줄에 "man pipe"를 입력 해보십시오. – nategoose

답변

0

아마도 가장 좋은 방법은 로컬 호스트에 TCP 연결을 사용하는 것입니다. * nix를 사용하는 경우 임시 파일을 열고 호스트 응용 프로그램에서 폴링하여 수행 할 수 있습니다.

2

설명에서, Popen을 사용하여 명령 행을 실행하는 것으로 보입니다.이 명령 행에서는 Popen이 쉘을 호출합니다.

대신는 popen은 다음과 같이 직접 프로그램 호출해야 :

from subprocess import Popen,PIPE 
p = Popen(['/my/fancy/program','-myarg1','-myarg2'],stdout=PIPE) 
from_process = p.communicate()[1] 
관련 문제