我正在编写一个小应用程序,它使用“索引文件”只需按几下按钮即可在资源管理器中打开文件夹。无论如何,我想在每次应用程序关闭时在“后台进程”中更新该索引文件。更新索引文件意味着扫描我们的网络,对于某些远程用户,可能需要几分钟时间。这就是我希望它在扫描过程中隐藏控制台的原因,以避免用户中止该过程。
我尝试过类似的几件事:
#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是不可能的。或?
答案 0 :(得分:0)
这不是您正在寻找的答案,但您可以重新设计您的系统架构:将您的索引更新程序写为服务器进程,通过套接字与您的实际应用程序进行通信。然后你只需要连续运行索引更新程序服务器进程(甚至可能在另一台机器上运行)并让索引更新程序进程完成所有耗时的工作。
答案 1 :(得分:0)
如果您只想执行以特定间隔发生的后台任务,请使用cron
。如果要在后台运行命令并使其保持运行,即使您注销控制台,也请使用nohup
。