直到我按Enter才能打开子进程的Python线程不加入

时间:2018-10-10 14:22:45

标签: python multithreading subprocess

我的程序应该在后台运行子进程,然后等待用户按Enter。当用户按下Enter键时,将在预定路径下创建一个空文件。这个空文件的存在就标志着子进程正常终止。 (我已经验证了基于文件存在的这种终止方式是正确的。)

在我的controller函数中,我产生了一个线程(threading.Thread),该线程使用subprocess.Popen运行子进程。然后,在controller中,我等待用户输入(Enter),然后创建特殊文件以终止子进程,最后加入生成的线程。

似乎似乎可以解决1个问题:按Enter键并终止序列运行后,我必须再按Enter 1次才能通过线程连接。也就是说,为了到达下面的pdb.set_trace()语句,我必须按Enter键两次。

是什么迫使我在这里按两次Enter键?

提示:当我删除raw_input语句时,程序将直接终止(这是不等待用户输入终止时的预期行为)。

def controllerSubprocess(command):
    subprocess.call(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)


def controller(parms): 

    # Defined "command" here.

    ret_stdout = []
    controller_subproc_thread = threading.Thread(target=controllerSubprocess,
                                                 args=(command,))
    controller_subproc_thread.daemon = False
    controller_subproc_thread.start()
    raw_input('Now running. Press ENTER to finish...')

    print '\nTerminating...'

    # Create an empty file that causes the process
    # opened by subprocess to end after roughly 5 seconds.

    controller_subproc_thread.join()

    pdb.set_trace()

0 个答案:

没有答案