进程正在运行时关闭控制台
我正在编写一个小应用程序,它只需按几下按钮就可以使用“索引文件”在资源管理器中打开文件夹。无论如何,我想在每次关闭应用程序时在“后台进程”中更新该索引文件。更新索引文件意味着通过我们的网络进行扫描,对于一些远程用户,这可能需要几分钟的时间。这就是为什么我希望它在扫描过程中隐藏控制台,以避免进程被用户中止。进程正在运行时关闭控制台
我试过类似几件事情:
#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是没有问题的。要么?
这不是你正在寻找的答案,但你可以重新设计你的系统架构:将你的索引更新器写成一个服务器进程,它通过套接字与你的实际应用进行通信。然后,您只需要索引更新程序服务器进程连续运行(甚至可以在另一台机器上运行),并让索引更新程序进行所有耗时的工作。
就像你说的不完全是我在找什么。当然,这可能是一个解决方案,但我不想做这么大的脚本。建立这样的服务意味着更多的工作,并让公司中的其他人能够主持这种服务。与仅使用时更新的网络上存储的索引文件相比。 – Saftblandaren
如果您只想执行以特定间隔发生的后台任务,请使用cron
。如果要在后台运行命令并保持运行状态,即使注销控制台,请使用nohup
。
这个问题被标记为Windows,而OP的代码是针对Windows的(例如运行“explorer”并使用'creationflags')。 – eryksun
脚本通常应该有一个控制台吗?如果没有,请使用与pythonw.exe一起运行的.pyw文件。 – eryksun
顺便说一句,如果您也使用'DETACHED_PROCESS',则忽略'CREATE_NO_WINDOW',因为将它们合并是没有意义的。 'DETACHED_PROCESS'对于在没有控制台的情况下运行控制台应用程序是有意义的,前提是它不会生成子控制台进程,因为它们只会创建自己的控制台窗口。有了这个标志,你还应该将标准句柄重定向到'NUL'设备。 'CREATE_NO_WINDOW'适用于子进程,因为它们将继承无窗口控制台。同样,您可以使用'STARTUPINFO'来隐藏控制台窗口。 – eryksun
是的脚本通常应该有一个控制台,因为在第一部分用户我提出了两个问题来回答。至少这就是现在这样做的方式,有可能是在除了控制台之外的其他窗口中提出这些问题,当我回到办公室时我会尝试。关于子进程方法的标志,我没有太多的线索,他们是如何工作的我只是用google搜索到了那些并尝试了不同的组合,谢谢让我详细介绍一下这些细节! – Saftblandaren