2016-09-03 4 views
2

나는 파이썬 스크립트 2 개 (foo.pybar.py)를 가지고 있습니다. 나는파이썬 백그라운드 쉘 스크립트 통신

python foo.py & 

가 지금은 foo.py. 내부에 스크립트를 실행하는 데 bar.py를 실행하고이 파일에서 표준 출력을 사용하려면 사용하여 백그라운드에서 foo.py를 실행하고 이것이 가능한가? 우분투 16.04 LTS를 사용하고 있습니다.

답변

2

UNIX named pipe을 사용할 수 있습니다.

먼저 파이썬 파일이있는 동일한 디렉토리에 mkfifo named_pipe을 실행하여 명명 된 파이프 객체를 만듭니다.

귀하의 foo.py 다음과 같이 수 :

while True: 
    for line in open('named_pipe'): 
     print 'Got: [' + line.rstrip('\n') + ']' 

그리고 당신의 bar.py은 다음과 같이 수 :

import sys 

print >>open('named_pipe', 'wt'), sys.argv[-1] 

그래서,이처럼 소비자 프로세스를 실행 python foo.py &합니다. 그리고 마지막으로 python bar.py Hello을 실행할 때마다 콘솔에 Got: [Hello]이라는 메시지가 표시됩니다.

UPD : 바울의 대답과 달리 이라는 이름의 파이프를 사용하면 다른 쪽에서부터 하나의 프로세스를 시작할 필요가 없습니다.

0

프로세스 간에는 pipes을 생성하는 UNIX 세계에서 실제로 온 시스템이 있습니다. 파이프는 기본적으로 한 쌍의 파일 설명자로, 각 프로그램은 그 중 하나에 액세스 할 수 있습니다. 다른 하나는 읽는 동안 하나 개의 프로그램은 파이프에 기록 :

https://docs.python.org/2/library/subprocess.html

그러나, 이것은 당신이 foo는 시작하고 서브 프로세스로 바과 출력/입력 후 연결이 추가적으로 스크립트를 필요로합니다.

관련 문제