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所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)