2017-04-09 12 views
0

실행 함수를 사용하여 외부 프로그램 실행을 사용하려고합니다.python3 (lynux)에서 run() on/into 함수의 출력을


def usual_process(): # some code here for i in subprocess.check_output(['foo','$$']): some_function(i) 는 이제 foo는 가정 : 정기적으로 내가 내 스크립트 에 사용해야하는 데이터의 행을 던졌습니다이 프로그램 은 내가 서브 프로세스 라이브러리를 발견하고 run()/check_output()

예를 사용했다 PATH 변수에 이미 있으며 세미 임의의 기간에 문자열을 출력합니다.
나는 foo가 출력에 새로운 행을 보낼 때마다 프로그램이 자신의 일을 수행하고 some_function(i)을 실행할 것을 원한다.

두 가지 문제가 있습니다. for 루프로 출력을 파이프와 배경 서브 프로세스 으로 이것을 실행하는 당신에게


업데이트 감사 : 나는에 따르면 This

with os.popen('foo') as foos_output: 
    for line in foos_output: 
     some_function(line) 

를 사용 some_function 위에 푸 출력을 얻을 관리해야 thisos.popen은 더 이상 사용되지 않지만 파이썬에서 내부 프로세스를 파이프하는 방법을 아직 이해하지 못했습니다. 이제 실행 방법을 알아야합니다. 이 함수는 백그라운드에서

+0

'linux'를 의미합니까? 그렇다면 어떤 배포판입니까? –

+0

Gentoo를 프로그래밍하고 테스트하는 동안,
가능한 경우 배포판 관련 코드를 최소로 제한하고 Pyton3을 고수하려고합니다. 결과 코드는 주로 처음에는 Raspbian을 대상으로하지만 후자의 버전에서는 안드로이드를 대상으로합니다. 의도는 _foo_의 출력을 기반으로 변수를 업데이트하는 것이 중요하지만 프로그램이 다른 것을 수행하는 동안 – Tomas

답변

0

그래서, 나는 그것을 풀었다. 첫 번째 단계는 외부 스크립트 시작했다 :
proc=Popen('./cisla.sh', stdout=PIPE, bufsize=1)

다음 나는 그것을 읽을 것이다 함수를 시작하고 그것을

def foo(proc, **args): 
     for i in proc.stdout: 
     '''Do all I want to do with each''' 

foo(proc).start()`

제한이 파이프를 통과 : 당신의 소원 t 캐치 스크립트 경우 을 오류가 있으면 파이프에 넣어야 할 것입니다.
두 번째는 낙하산을 죽이면 좀비가 남습니다. 따라서 신호 처리에서 어린이를 죽이는 것을 잊지 마십시오.

관련 문제