进程正在运行时关闭控制台

时间:2017-09-12 11:17:46

标签: python subprocess multiprocessing windows-console

我正在编写一个小应用程序,它使用“索引文件”只需按几下按钮即可在资源管理器中打开文件夹。无论如何,我想在每次应用程序关闭时在“后台进程”中更新该索引文件。更新索引文件意味着扫描我们的网络,对于某些远程用户,可能需要几分钟时间。这就是我希望它在扫描过程中隐藏控制台的原因,以避免用户中止该过程。

我尝试过类似的几件事:

#these are just dummy lines
path = get_user_input()
subprocess.Popen(r'explorer "%s"' % path)
#Here I start my update process
multiprocessing.Process(target=update_index).start()
#end of script, now I want that process to continue until finished while main console closes. I only seem to get one or the other.

我也尝试过使用:

DETACHED_PROCESS = 0x00000008
CREATE_NO_WINDOW = 0x08000000
subprocess.Popen(command, shell=True, stdin=None, stdout=None, 
                 stderr=None, 
                 creationflags=DETACHED_PROCESS|CREATE_NO_WINDOW)

并设法获得一个单独的控制台窗口,但仍无法阻止用户关闭该过程。

另外请记住,我想稍后用py2exe这样的脚本分发这个脚本,以便那些没有python的人可以访问,所以我想使用pythonw.exe是不可能的。或?

2 个答案:

答案 0 :(得分:0)

这不是您正在寻找的答案,但您可以重新设计您的系统架构:将您的索引更新程序写为服务器进程,通过套接字与您的实际应用程序进行通信。然后你只需要连续运行索引更新程序服务器进程(甚至可能在另一台机器上运行)并让索引更新程序进程完成所有耗时的工作。

答案 1 :(得分:0)

如果您只想执行以特定间隔发生的后台任务,请使用cron。如果要在后台运行命令并使其保持运行,即使您注销控制台,也请使用nohup