gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-03 12:01:33 25 4
gpt4 key购买 nike

我有一个 python 脚本 main.py 需要启动 scrapy可执行文件,所以我使用 Popen 来执行此操作(使用 subprocess.call() 具有相同的结果)。为了简化事情,我只运行了 scrapy 的帮助参数。

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

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

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

[Unit]
Description=Scrapy test
After=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_exception
OSError: [Errno 2] No such file or directory

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

最佳答案

你必须specify the current working directory在调用 Popen 以确保从正确的目录执行 scrapy

关于当 python 脚本作为 systemd 服务运行时,Python Popen 无法识别 scrapy,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46932644/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com