subprocess.call nohup & - 运行 不在后台处理

subprocess.call nohup & - doesn't run process in background

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

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

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, '&'])

但它似乎正在阻塞,浏览器正在等待响应。为什么?我怎样才能让它发挥作用?

& 用于 shell 所以尝试这样:

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

更新:

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

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