1

subprocess モジュールを使用してサブプロセス (Java プログラム) を開始し、その出力ストリーム (stdout) に接続しています。クラスで次のコードを実行しようとしましたが、正常に実行されましたが、スレッドで実行しようとすると、奇妙なことが起こり、プログラムが機能しません。

class MiThread(threading.Thread,QMainWindow, Ui_MainWindow):  
      def __init__(self):  
          threading.Thread.__init__(self)   

      def run(self):

        print "si se puede"
        try:
            from Queue import Queue, Empty
        except ImportError:
    #from queue import Queue, Empty  # python 3.x
            print "error"

        ON_POSIX = 'posix' in sys.builtin_module_names

        def enqueue_output(out, queue):
            for line in iter(out.readline, b''):
                queue.put(line)
            out.close()

        p= Popen(["java -Xmx256m -jar bin/HelloWorld.jar"],cwd=r'/home/karen/sphinx4-1.0beta5-src/sphinx4-1.0beta5/',stdout=PIPE, shell=True, bufsize= 4024)
        q = Queue()
        t = threading.Thread(target=enqueue_output, args=(p.stdout, q))
        #t = Thread(target=enqueue_output, args=(p.stdout, q))
        print "estoy en el hilo"
        t.daemon = True # thread dies with the program
        t.start()

# ... do other things here
        while True:

            try: line = q.get_nowait()
         # or q.get(timeout=.1)
            except Empty:
                print('')
            else: # got line
    # ... do something with line
                print "No esta null"
                print line

class Workspace(QMainWindow, Ui_MainWindow): """ このクラスは、GUI の「ワークスペース」全体を管理するためのものです。現在、ワークスペースは MainWindow に似ています """

 def __init__(self):

         #Llamar al hilo secundario
        t= MiThread()
        t.start()

スレッドで実行したい!助けてください!

4

0 に答える 0