首页 > 解决方案 > subprocess.call nohup & - 不在后台运行进程

问题描述

我有一个运行 Scrapy 蜘蛛的函数(Django 管理员)。该功能正常工作。我现在要做的是使其成为非阻塞的。

这按预期工作 - 我需要等待 SH SCRIPT 完成。所以基本上我点击这个动作,浏览器正在等待抓取结束。

subprocess.call([settings.CRAWL_SH_ABS_PATH, "db_profiles_spider", "ids", ids])

我希望它是非阻塞的,因此浏览器会立即刷新。

我试过这个:

subprocess.call(["nohup",settings.CRAWL_SH_ABS_PATH, "db_profiles_spider", "ids", ids, '&'])

但它似乎被阻止并且浏览器等待响应。为什么?我怎样才能让它工作?

标签: pythondjangobashscrapysubprocess

解决方案


&是外壳,所以试试这样:

cmd = ' '.join(["nohup", settings.CRAWL_SH_ABS_PATH, "db_profiles_spider",
                "ids", ids, '&'])
subprocess.call(cmd, shell=True)

更新:

对我来说,它也可以不使用nohup.

您还可以创建一个线程并在该线程中运行命令。os.fork()在子进程中运行命令也可以。


推荐阅读