You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用psutil启停Python脚本时出现FileNotFoundError求助

问题

我尝试使用webreset.py脚本每隔5分钟运行并终止site.py脚本,webreset.py代码如下:

from psutil import Process, Popen
from time import sleep
pid = 0
while True:
    if pid:
        Process(pid).terminate()
    process = Popen('python3 site.py')
    pid = process.pid
    sleep(300)

在Ubuntu 20.04上执行命令sudo python3 webreset.py时,出现如下错误:

Traceback (most recent call last):
  File "webreset.py", line 7, in <module>
    process = Popen('python3 site.py')
  File "/usr/local/lib/python3.8/dist-packages/psutil/__init__.py", line 1316, in __init__
    self.__subproc = subprocess.Popen(*args, **kwargs)
  File "/usr/lib/python3.8/subprocess.py", line 858, in __init__
    self._execute_child(args, executable, preexec_fn, close_fds,
  File "/usr/lib/python3.8/subprocess.py", line 1704, in _execute_child
    raise child_exception_type(errno_num, err_msg, err_filename)
FileNotFoundError: [Errno 2] No such file or directory: 'python3 site.py'
解决方法

错误原因是psutil的Popen遵循subprocess的参数规则:当传入单个字符串时,系统会把整个字符串当作独立的可执行文件路径查找,不会自动拆分命令和参数。

修改代码,将命令拆分为列表形式传入即可:

from psutil import Process, Popen
from time import sleep
pid = 0
while True:
    if pid:
        Process(pid).terminate()
    # 将命令拆分为可执行文件和参数两个元素的列表
    process = Popen(['python3', 'site.py'])
    pid = process.pid
    sleep(300)

额外注意事项:

  • 如果site.py不在脚本运行的当前工作目录,必须传入该文件的完整绝对路径,例如['python3', '/home/your_user/site.py']
  • 若sudo环境下无法找到python3,可以替换为python3的完整路径(通常是/usr/bin/python3),避免PATH环境变量差异导致的问题

内容的提问来源于stack exchange,提问作者Ilyad Greyrat

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.05 01:30:31