首页 > 解决方案 > 使用从其他脚本导入函数的 .bat 运行 python 脚本

问题描述

我正在尝试通过 .bat 运行我的 python 脚本。该脚本从其他脚本导入函数,并且在 IDE(Spyder) 中运行时可以正常工作,但是当我运行 .bat 时出现无法导入模块的错误。

.bat 如下

"D:\Users\User\AppData\Local\Programs\Python\Python38-32\python.exe" "D:\Users\User\Documents\programming\test.py"

我收到以下错误

回溯(最后一次调用):文件“D:\Users\User\Documents\programming\test.py”,第 1 行,来自 SFTPDownload 导入下载SFTP ModuleNotFoundError:没有名为“SFTPDownload”的模块

我需要在 .bat 中添加什么来获取我在 SFTPDownload.py 中的功能。这与 test.py 位于同一文件夹中。

提前致谢。

标签: pythonbatch-file

解决方案


如果SFTPDownload.py您的文件在文件夹中,D:\Users\User\Documents\programming\ 那么您必须在运行 python 脚本之前转到此文件夹

  cd D:\Users\User\Documents\programming\

  D:\Users\User\AppData\Local\Programs\Python\Python38-32\python.exe test.py

系统可能会在不同的文件夹(用作Current Working Directory)中运行您的批处理,然后 python 脚本在此文件夹中搜索您的文件。

在 Python 中,您可以检查Current Working Directory

 print( os.getcwd() )

另请参阅:批处理文件中的当前目录是什么?


最终在导入之前的 python 脚本中,SFTPDownload您可以将文件夹添加到python 用来搜索导入文件D:\Users\User\Documents\programming\的特殊列表。sys.path

 import sys

 sys.path.insert(0, r'D:\Users\User\Documents\programming\')

 import SFTPDownload

为了使它更通用(所以当你移动到不同的文件夹时它会起作用test.pySFTPDownload.py你可以尝试

 import sys
 import os

 APP_FOLDER = os.path.abspath(os.path.dirname(__file__))
 #APP_FOLDER = os.path.abspath(os.path.dirname(sys.argv[0]))

 sys.path.insert(0, APP_FOLDER)

 import SFTPDownload

推荐阅读