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

Python FTP上传脚本在Bash文件中无法运行,但终端可正常执行

排查Python FTP脚本在Bash中无法运行的问题

我来帮你一步步定位并解决这个问题,先从几个最常见的关键点入手:

1. 先捕获错误信息,找到问题根源

你的Bash脚本目前没有输出任何错误提示,这让排查变得很困难。先修改Bash脚本,把Python执行时的错误信息也打印出来:

#!/usr/bin/env bash
python3.6 "upload.py" 2>&1
exit 0

运行这个修改后的Bash脚本,就能看到Python抛出的具体错误(比如文件找不到、FTP权限不足、连接失败等),这是排查的核心第一步。

2. 确保工作目录一致

终端直接运行Python脚本时,你的工作目录就是upload.py所在的目录,但运行Bash脚本时,工作目录可能不是这个路径(比如你在其他文件夹下执行./xxx/script.sh)。这会导致open('index.html','rb')找不到本地文件。

解决方法:在Bash脚本里先切换到脚本自身所在的目录,再执行Python代码:

#!/usr/bin/env bash
# 切换到当前Bash脚本所在的目录
cd "$(dirname "$0")"
python3.6 "upload.py" 2>&1
exit 0

$(dirname "$0")会自动获取Bash脚本的所在路径,切换后就能保证相对路径的正确性。

3. 验证Python环境的一致性

终端里的python3.6和Bash脚本调用的python3.6可能不是同一个环境——比如Bash执行时的PATH环境变量和终端不同,导致调用了另一个版本的Python,或者缺少依赖库。

验证方法:

  • 在终端执行:which python3.6 和 python3.6 -c "import ftplib; print(ftplib.__file__)"
  • 在Bash脚本里也加入这两行命令,对比输出是否一致。

如果不一致,在Bash脚本里使用Python的绝对路径(比如/usr/bin/python3.6)来调用即可。

4. 修复FTP上传命令的路径错误

你的Python脚本里的FTP上传命令有明显问题:

session.storbinary('STOR ' + '/', file)

STOR /只指定了服务器的根目录,但没有指定文件名,FTP服务器通常会拒绝这种请求,或者不知道该把文件存成什么。应该修改为指定目标文件名:

session.storbinary('STOR /index.html', file)

如果需要上传到服务器的特定子目录,也可以先切换目录再上传:

session.cwd('/your/target/folder')  # 切换到服务器目标目录
session.storbinary('STOR index.html', file)

5. 给Python脚本添加错误捕获,细化排查

在Python脚本里加入异常捕获,能更精准地定位是连接、文件读取还是上传环节出了问题:

import ftplib
try:
    session = ftplib.FTP('server address','username','password')
    print("成功连接到FTP服务器")
    
    file = open('index.html','rb')
    print("成功打开本地文件index.html")
    
    session.storbinary('STOR /index.html', file)
    print("文件上传完成")
    
    file.close()
    session.quit()
except Exception as e:
    print(f"执行出错: {str(e)}")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 08:03:25