python - 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, '&'])
但它似乎被阻止并且浏览器等待响应。为什么?我怎样才能让它工作?
解决方案
&
是外壳,所以试试这样:
cmd = ' '.join(["nohup", settings.CRAWL_SH_ABS_PATH, "db_profiles_spider",
"ids", ids, '&'])
subprocess.call(cmd, shell=True)
更新:
对我来说,它也可以不使用nohup
.
您还可以创建一个线程并在该线程中运行命令。os.fork()
在子进程中运行命令也可以。
推荐阅读
- java - 当我将项目导出到 jar 时,我无法用对象写入(也可能读取)文件
- python - Collatz Conjecture Python - 超过 2 万亿的错误输出(仅限!)
- python - Mac osx的Anaconda安装问题
- jekyll - Jekyll 博客中 series.html 中的 if 语句
- node.js - 为特定日期设置构建 MongoDB 数据的最佳方法
- node.js - Json Web Token verify() 返回 jwt 格式错误
- python - Python Beautiful Soup,如何获取内容
- laravel - 将集合中的 created_at 值更改为碳人类可读
- javascript - 在 ES6 中过滤对象以形成另一个对象
- c++ - 在编译时生成某种子类/类型注册表?