간략화를 위해 쉘 스크립트는 cat
명령이라고 가정하십시오. 쉘에서 그것은 일반적으로 다음과 같이 호출됩니다 :파일을 디스크에 쓰지 않고 파이썬에서 쉘 스크립트 호출하기
$ cat /some/path/myfile.txt
이제 파일을 동적으로 생성되고 디스크에 기록하는 것은 중요한 성능 저하, 현재 보안 문제를하고 다중 사용자 환경에서 파일 관리 오버 헤드가 증가 할 것 . 스크립트는 수정하거나 표준 입력에서 읽을 수 없습니다 (cat
은 작동중인 샘플 일뿐입니다). 아직 명령이 여전히 파이프에서 더 많은 입력을 기다리고 있음을 보여주는 아무 것도 반환하지 않습니다 내가 pout
p.poll()
를 닫더라도
import os
pin, pout = os.pipe()
pin, pout = os.fdopen(pin, 'r'), os.fdopen(pout,'w')
from subprocess import Popen
pout.write("test")
pout.flush()
p = Popen('cat /proc/self/fd/%s' % pout.fileno(), shell=True)
:
나는이 시도.파이프에서 오는 데이터가 더 이상 없다는 것을 어떻게 알 수 있습니까? 이 문제를 해결하기위한 다른 방법이 있습니까?
파일 내용이 prog1
라는 프로그램에 의해 생성되는 경우 편집
bash는,이이 방식으로 해결 될 것입니다 :
$ cat <(prog1)
편집 2
당신이 만약 shell을 필요로하지 않는다면 Alfe가 언급 한 다른 옵션이 더 나을 것이다. 문제는 여전히 존재한다. (즉, 프로세스가 th 조금 주위 바이올린 전자 파일의 내용)
#...same as before
p = Popen(['cat', '/dev/stdin'], stdin=pout)
나는 당신이 원하는 것을 이해하지 못합니다. 좋은 해결책을 찾지 못하면 [tempfile] (http : //docs.python.org/3/library/tempfile.html). –
@BlaXpirit 임시 파일이 디스크에 쓰고 있지만, 유일한 조건은 그렇게하지 않는 것입니다. 질문을 수정하고 더 설명하려고합니다 – estani