2017-03-02 152 views
1

我有一个使用inotify-tools监视目录的脚本。当新文件被添加到目录时,脚本调用一个python程序并将路径和填充名称作为参数传递。从bash脚本执行Python程序时出现ModuleNotFoundError

这一切工作正常,除了我得到一个ModuleNotFoundError ...有问题的模块是boto3(对于AWS S3)。

python脚本在Pycharms中正常工作,所以我真的不知道是什么导致了错误。

监控脚本:

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。删除该行,然后再出现1个问题:在监视器脚本中,我打电话给python,但应该叫python3

+0

@Inian如你所愿。完成;) – pookie

+0

只是想看看''bash'脚本方面的东西看起来不错,你是否尝试打印值以查看它们是否正常,还要双引号“python”$ pythonscriptlocation“”$ path“ “$ file”' – Inian

+0

@Inian谢谢,但我已经设法弄清楚问题是什么...... – pookie

回答

0

你如何启动这个脚本?我猜想你运行的用户环境与交互环境有某些不同之处。最可能的原因是你在这两个环境中设置了不同的环境变量 - 尝试在运行你的Python代码之前打印出来,看看它是否有所不同。

另一种可能性是,您在两种环境中设置了不同的路径,甚至没有运行相同的Python版本。检查你的PATH环境变量,看看它们是否相同。

这些可能会有所不同的一个原因是,如果您的交互式环境(脚本工作的地方)从.profile文件中获取这些或其他配置。 .profile只能被登录shell读取,而不能被其他shell读取。把它们放在你的.bashrc而不是.profile可能会有所作为。

(应该不用说,如果你正在运行在这两种环境中不同的用户,即相关的环境变量,需要同时存在于用户的配置。)

+0

我发现Anaconda(我之前安装的)在''.bashrc'中添加了一行,使我的PATH混乱。谢谢! – pookie

+0

我也发现我必须调用'python3'而不是'python' ...这么血腥!下一个问题后的一个问题! #rantover。 – pookie