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

MacOS下Bash调用Python脚本报FileNotFoundError问题求助

解决Bash脚本调用Python时的FileNotFoundError问题

这个问题的核心很简单:工作目录不一致。

当你手动在终端运行python3 Test.py时,你肯定是先切换到了/Users/JohnDoe/Documents/Projects/目录下,所以Python脚本里的Data/相对路径是相对于这个Projects目录的,自然能找到(或者创建)对应的文件夹和文件。

但当你运行Bash脚本时,默认的工作目录是你的用户主目录/Users/JohnDoe/,而不是Python脚本所在的Projects目录。这时候Python尝试写入Data/xxx.json,其实是在主目录下找Data文件夹,而这个文件夹根本不存在,所以就抛出了FileNotFoundError——要注意,open()函数带w模式时,只会创建文件本身,但不会自动创建上级目录,如果上级目录不存在就会报错。

给你几个可行的解决方案:

方案1:在Bash脚本中切换工作目录

修改你的Bash脚本,先切换到Python脚本所在的目录,再执行脚本:

#!/bin/bash
# 切换到Python脚本所在的目录
cd /Users/johndoe/Documents/Projects/
# 执行脚本(现在相对路径就和手动运行时一致了)
python3 Test.py

方案2:在Python脚本中使用绝对路径

这种方法更健壮,不管从哪个目录运行脚本都不会出问题。用os.path模块获取脚本自身的目录,然后拼接出Data文件夹的绝对路径:

import os

# 获取当前脚本所在的绝对目录
script_directory = os.path.dirname(os.path.abspath(__file__))
# 拼接Data文件夹和目标文件的完整路径
target_file = os.path.join(script_directory, 'Data', f'{filename}.json')

with open(target_file, 'w') as outfile:
    # 这里写你的JSON写入逻辑

方案3:自动创建Data目录(可选)

如果你的Python脚本需要自动创建Data文件夹(比如第一次运行时),可以在打开文件前先检查并创建目录:

import os

script_directory = os.path.dirname(os.path.abspath(__file__))
data_folder = os.path.join(script_directory, 'Data')

# 如果Data目录不存在,递归创建它(包括上级目录)
if not os.path.exists(data_folder):
    os.makedirs(data_folder)

target_file = os.path.join(data_folder, f'{filename}.json')
with open(target_file, 'w') as outfile:
    # JSON写入逻辑

选其中一个方案就能解决你的问题了,推荐方案2或3,因为它们不依赖于运行脚本时的工作目录,适应性更强。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:24:47