왜 내 자신의 클래스로 sub.Popen.stdout이 아닌 sys.stdout을 오버라이드 할 수 있습니까? 오버라이드 할 수있는 방법을 알려주십시오.파이썬, 왜 Popen.stdout을 오버라이드 할 수 없습니까?
저는 GUI 프로젝트에서 작업 중이며 모든 것이 완료되었을 때가 아니라 "real_time"의 text_view에서 다른 프로그램의 출력을 인쇄하려고합니다. 나는 이런 식으로 뭔가를해야만 할 sys.stdout 내가 무시하고
:
import subprocess as sub
def main() :
popen = sub.Popen('./pyscript.py', stdout=sub.PIPE)
for line in popen.stdout : print 'Line :', line
print 'Main done'
if __name__ == '__main__' : main()
: 여기
class MyStdOut :
def __init__(self) : self.text = ""
def write(self, string) : self.text += string
여기
import os
def main() :
for i in range(10) :
print i
os.system('sleep 0.1') ## this is just to make some delay, i did also 3 loops
if __name__ == '__main__' : main()
일부 프로그램 'pyscript.py'는 메인 프로그램입니다
아직도 '실시간'이 아니며, 끝나면 모든 것을 얻습니다.
나는 또한 의사 소통을 시도했지만 같은 결과를 얻는다.
내 실제 프로그램에서는 text_view (GUI GTK +)에 다른 프로그램의 출력물을 인쇄해야합니다. 나는 subprocess.stdout 파일을해야합니다 용의자지만 내가 너무 오류가있어 IOBase에서 상속 일부 클래스를 만들려고 할 때.
모두가 가능하다고 말하지만 여전히 많은 성공을 거두었습니다.
이 코드는 sys.stdout을 덮어 쓰는 것과 관련이 있습니까? 이것은 sys.stdout과 전혀 관련이없는 클래스입니다. 스트림을 구현하는 것은 write()를 구현하는 것 이상의 것입니다. 당신이 해결하려고하는 실제 문제는 무엇입니까? 정확하고 장황하게하십시오 - 그렇지 않으면 당신의 질문은별로 의미가 없습니다. –