어제 파이썬 (Passing wxPython objects as multiprocessor arguments)으로 작성한 프로그램의 문제점에 대해 질문했습니다. 필자는 스크립트를 평가하는 함수에 다중 프로세스 프로세스를 사용하여이 문제를 해결할 수있었습니다. 그러나 스크립트가 다른 프로세스에서 실행되기 때문에 출력이 wxPython TextCtrl 윈도우로 제대로 리디렉션되지 않습니다. 그래서, 내 텍스트 창에 쓸 수 있도록 자식 프로세스의 출력을 내 주 프로세스로 지속적으로 리디렉션하는 방법을 찾고 있습니다.다중 프로세스 프로세스의 출력을 논 블로킹 리디렉션
def createprocess(test):
q = Queue()
q.put(test)
p = Process(target=runtest, args=(q,))
p.start()
p.join()
return q.get()
이 프로세스의 목표 함수 :
def runtest(q):
test = q.get()
exec 'import ' + test
func=test+'.'+test+'()'
ret = eval(func)
q.put(ret)
I이 스레드 (How can I send python multiprocessing Process output to a Tkinter gui)를 발견 출력 리디렉션 방법을 설명
이
프로세스를 설정하는 기능이다 그러나 child process에서는 평가가 완료된 후에 결과물을받는 것이 문제였다.
왜 이런 식으로 하시겠습니까? 사람들이 "악의적 인 eval"이라고 말할 때 사람들이 말하는 것은 __ 정확한 것입니다. " 이 전체 방법은 잘못되었으며 출력을 리디렉션하면 해결되지 않습니다. – agf
그런 다음 어떤 방법을 사용해야합니까? 제발 내가 파이썬 프로그래밍을 처음 접했을 때 깨달으십시오. – Nait
정확하게 당신이하고있는 것을 분명히하지 않았기 때문에 나는 대답 할 수 없습니다. 이전 질문에 대한 대답으로 제 제안을했습니다. 그냥'testmodule = __import __ (test)'를 시도한 다음'ret = getattr (testmodule, test)()'을 시도 했습니까? 적어도 "eval"보다 좋을 것입니다. 또한 'yield'또는'return'을 사용하는 대신'test'가 결과를 출력하는 이유는 무엇입니까? 함수에서 정보를 출력하는 것은 모든 언어에서 잘못된 것입니다. – agf