使用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
相关产品推荐
相关产品推荐

