我的程序应该在后台运行子进程,然后等待用户按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()