我有一个使用inotify-tools
监视目录的脚本。将新文件添加到目录时,脚本会调用python程序并将路径和填充名称作为参数传递。
一切正常,除了我得到ModuleNotFoundError
...有问题的模块是boto3(适用于AWS S3)。
python脚本中的python脚本工作得很好,所以我真的不知道导致错误的原因。
监控脚本:
source=$1
pythonscriptlocation=$2
inotifywait -m $source -e create -e moved_to |
while read path action file; do
python $pythonscriptlocation $path $file
done
Python脚本示例:
import argparse
import boto3
parser = argparse.ArgumentParser();
parser.add_argument("source_path");
parser.add_argument("filename");
args = parser.parse_args();
print(args.source_path);
print(args.filename);
更新 - 解决方案
事实证明,ANACONDA
已在我的.bashrc
文件底部添加了一个环境变量...结果,它搞砸了我的PATH
。删除了该行,然后又出现了一个问题:在监控脚本中,我正在调用python
,但应该调用python3
。
答案 0 :(得分:0)
你是如何推出这个脚本的?我猜你所运行的用户环境在某种程度上与交互式环境不同。最可能的原因是您在这两种环境之间以不同方式设置 PYTHONPATH 环境变量 - 在运行Python代码之前尝试打印出来并查看它是否有所不同。
另一种可能性是,您在两个环境中的路径设置不同,而且您甚至没有运行相同的Python版本。检查 PATH 环境变量,看看它们是否相同。
这些可能不同的一个原因是,脚本工作的交互式环境是从.profile文件中获取这些或其他配置。 .profile 仅由登录shell读取,而不是其他shell读取。将这些内容放在 .bashrc 而不是 .profile 中可能会有所不同。
(不用说,如果你在这两个环境中作为不同的用户运行,那么相关的环境变量需要存在于两个用户和配置中。)