当python脚本作为systemd服务运行时,Python Popen不识别scrapy

当python脚本作为systemd服务运行时,Python Popen不识别scrapy,第1张

概述我有一个需要启动 scrapy可执行文件的python脚本main.py,所以我使用Popen来做(使用subprocess.call()有相同的结果).为了简化事情我只是运行scrapy的帮助论点. import subprocess...p = subprocess.Popen(['scrapy', '-h']) 该脚本需要在安装了scrapy的vitualenv内运行.当我激活virtu 我有一个需要启动 scrapy可执行文件的python脚本main.py,所以我使用Popen来做(使用subprocess.call()有相同的结果).为了简化事情我只是运行scrapy的帮助论点.

import subprocess...p = subprocess.Popen(['scrapy','-h'])

该脚本需要在安装了scrapy的vitualenv内运行.当我激活virtualenv并将脚本作为python main.py运行时,命令scrapy -h按预期执行.

现在,我需要将此脚本作为systemd服务运行.我已经为脚本创建了systemd单元,如下所示:

[Unit]Description=Scrapy testAfter=network.target[Service]User={{ scrapy_user }}WorkingDirectory={{ test_path }}ExecStart={{ virtualenv_path }}/bin/python {{ test_path }}/main.py[Install]WantedBy=multi-user.target

当我使用sudo systemctl start scrapy-test启用和启动服务时,代码会正常运行,直到p = subprocess.Popen([‘scrapy’,’ – h’])当我收到异常时

file "{{ test_path }}/main.py",line 52,in launch_spIDer   p = subprocess.Popen(['scrapy','-h'])file "/usr/lib/python2.7/subprocess.py",line 710,in __init__   errread,errwrite)file "/usr/lib/python2.7/subprocess.py",line 1335,in _execute_child   raise child_exceptionOSError: [Errno 2] No such file or directory

我还尝试通过在Popen之前添加os.chdir(‘{{virtualenv_path}} / bin’)来更改工作目录,但是我得到完全相同的异常.我确信该脚本是通过virtualenv运行的,因为(1)它是在ExecStart属性中设置的,(2)在导入未安装在系统python中的模块时,脚本会引发异常.

解决方法 线索在这里:

ExecStart={{ virtualenv_path }}/bin/python {{ test_path }}/main.py

scrapy命令位于$VIRTUAL_ENV / bin上,该命令不在systemd $PATH上.

你可以尝试:

import osimport subprocessp = subprocess.Popen(['%s/bin/scrapy' % os.environ['VIRTUAL_ENV'],'-h'])
总结

以上是内存溢出为你收集整理的当python脚本作为systemd服务运行时,Python Popen不识别scrapy全部内容,希望文章能够帮你解决当python脚本作为systemd服务运行时,Python Popen不识别scrapy所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1196382.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-03
下一篇 2022-06-03

发表评论

登录后才能评论

评论列表(0条)

保存