2
파이프의 쓰기 끝이 닫히는 것을 알 수있는 방법을 생각하고 있습니다. 어떻게 든 그것을 할 수있는 방법이 있습니까? 내가 피하기 위해 노력하고있어파이프의 쓰기 끝이 닫혀 있는지 확인하십시오.
from subprocess import Popen, PIPE
p = subprocess.Popen('ls -lh', stdout = PIPE, shell = True)
def read_output(out,queue):
for line in iter(out.readline,b''):
print('.')
t = Thread(target=enqueue_output, args=(p.stdout,q))
t.daemon = True
t.start()
while True:
#this only works if I put
#if line == '' :
# out.close()
#in the for loop of read_output, which I want to avoid.
if p.stdout.closed : #need to find something else than closed here...
break
IOW 내가 어떻게 든 쓰기 알고 속성이나 p.stdout하는 방법을 읽고 싶은 .... 입출력 스레드에 out.close()를해야합니다 끝이 닫혔습니다.
이것은 Popen의 p.stdout을 우아하게 읽는 또 다른 방법을 찾는 것이 아니며 이미 다른 2 가지 방법이 있습니다. 그것은 가능한 것이어야한다고 생각했던 것을 배우는 것에 관한 것입니다. 그러나 나는 어떻게 해야할지 알지 못했습니다 ...
건배!
답장을 보내 주셔서 감사합니다. 그러나 이것은 내가 찾고있는 것이 아닙니다. p는 쉘을 생성하는 서브 프로세스입니다. p.stdout은 쉘 프로세스에 의해 쓰여지고 나를 읽습니다. 나는 쉘 프로세스를 가장 할 수 없으며 stdout에 쓰려고 할 수도 없다. 쉘 프로세스가 파이프의 끝을 닫았는지를 알고 싶을뿐입니다. Readline 대신 p.stdout에서 read_raw를 수행하면 EOFError가 발생하지만 readline은이를 잡아내어 아무 것도 얻지 못합니다. 나는 여전히 p.stdout의 쓰기 측면에 대한 핸들을 볼 수있는 방법이 있다고 생각한다. – caliloo