나는 명령 행에서 stdin을 읽는 도구를 가지고있다. gziped 파일로 나도 실행됩니다 명령 행에서 ...Python에서 Popen으로 열린 gzip 파일을 사용할 수 있습니까?
./foo < bar
또는 ...
cat bar | ./foo
나는 내가 할 수있는 파이썬에서
zcat bar.gz | ./foo
를 실행할 수 있습니다. ..
Popen(["./foo", ], stdin=open('bar'), stdout=PIPE, stderr=PIPE)
하지만 내가 바람
import gzip
Popen(["./foo", ], stdin=gzip.open('bar'), stdout=PIPE, stderr=PIPE)
이
p0 = Popen(["zcat", "bar"], stdout=PIPE, stderr=PIPE)
Popen(["./foo", ], stdin=p0.stdout, stdout=PIPE, stderr=PIPE)
내가 뭔가 잘못하고 있는가 실행하지 할 수 없어? Popen에 대한 표준 arg로 gzip.open ('bar')을 사용할 수없는 이유는 무엇입니까?
예, 실제로 p = Popen ([...])을 사용하고 p.communicate() [0]을 읽었습니다. 또한 내 프로그램은 foo라고하지 않으며 입력 파일은 bar라고하지 않습니다 .-) 쉬운 수정이 없다고 말하는 것입니까? Popen ([ "./foo",], stdin = gzip.open ('bar'), stdout = PIPE, stderr = PIPE)이 이상한 것을 알았습니다. 예외. 그것이 fileno 속성을 가지고 있지 않더라도 그것으로 무언가를하고 있습니다. –
서브 프로세스 모듈의 'PIPE'및 'STDOUT'속성은 '특수 상수'입니다. stderr = STDOUT 인 경우 상수는 클라이언트 프로세스로 전달되어야하는 fileno가 동일해야하며 stdout으로 전달되어야 함을 나타냅니다. PIPE의 경우 운영 체제 'pipe()'명령을 사용하여 새 파일을 만듭니다. 파이프의 절반 (실제로 2 개의 숫자)이 클라이언트 프로세스에 전달되고 사용자에게 하나가 전달됩니다. 한 부분에 쓰여지는 내용은 모두 다른 부분에서 읽을 수 있습니다. 쉬운 방법으로 고칠 수 없으면 더 많은 프로그래밍이 필요할 것입니다. – ondra