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

Linux下使用os.system不切换目录运行指定路径Python脚本报错的解决方法

解决Linux下不切换目录运行指定路径Python脚本的问题

嘿,你的问题根源其实是把相对路径和绝对路径的写法搞混啦!咱们来拆解一下:

你之前写的./home/user/code/update.py里,./是用来表示「当前目录下」的相对路径前缀,但/home/user/code本身是绝对路径(以/开头),把它们拼在一起后,系统会误以为你要找「当前目录下的home/user/code/update.py」,这当然不存在,所以才会报“找不到文件”的错。

给你几个靠谱的解决方案,按需选就行:

方案1:直接用Python解释器调用脚本(最稳妥)

不管脚本有没有可执行权限,这种方式都能跑通,只需要把脚本的绝对路径传给Python解释器:

import os
path = "/home/user/code"
# 用f-string拼接更直观
os.system(f"python3 {path}/update.py")
# 如果你习惯字符串拼接的话也可以:
# os.system("python3 " + path + "/update.py")

方案2:用脚本的绝对路径直接运行(需满足两个前提)

如果你想保留之前./update.py那种直接执行脚本的方式,只需要去掉多余的./,直接用绝对路径就行:

import os
path = "/home/user/code"
os.system(f"{path}/update.py")

但要确保两个条件:

  • 脚本update.py的第一行有正确的shebang声明,比如:#!/usr/bin/env python3
  • 已经给脚本添加了可执行权限,执行过:chmod +x /home/user/code/update.py

方案3:推荐用subprocess模块替代os.system(更现代的写法)

os.system其实是比较老旧的API,Python官方更推荐用subprocess模块,它能帮你更好地控制进程、捕获输出和错误信息,用法也很简单:

import subprocess
path = "/home/user/code"
# 直接运行脚本(同样需要满足方案2的两个前提)
subprocess.run([f"{path}/update.py"], check=True)
# 或者用Python解释器调用
subprocess.run(["python3", f"{path}/update.py"], check=True)

check=True会让脚本在子进程出错时抛出异常,方便你排查问题。

另外补充一下:你之前用cd {path}; ./update.py能成功,是因为cd到目标目录后,./update.py就变成了该目录下的相对路径,系统自然能找到脚本。现在不切换目录,只要用对绝对路径的写法就没问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.28 09:28:12