Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/19.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从bash脚本执行Python程序时发生ModuleNotFoundError_Bash_Python 3.x_Ubuntu 16.04_Boto3 - Fatal编程技术网

从bash脚本执行Python程序时发生ModuleNotFoundError

从bash脚本执行Python程序时发生ModuleNotFoundError,bash,python-3.x,ubuntu-16.04,boto3,Bash,Python 3.x,Ubuntu 16.04,Boto3,我有一个脚本,它使用inotify工具监视目录。将新文件添加到目录时,脚本将调用python程序,并将路径和填充名作为参数传递 除了我得到一个modulenofounderror。。。所讨论的模块是boto3(适用于AWS S3) python脚本在Pycharms中运行良好,因此我真的不知道是什么导致了错误 监视脚本: source=$1 pythonscriptlocation=$2 inotifywait -m $source -e create -e moved_to | while

我有一个脚本,它使用
inotify工具
监视目录。将新文件添加到目录时,脚本将调用python程序,并将路径和填充名作为参数传递

除了我得到一个
modulenofounderror
。。。所讨论的模块是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
文件的底部添加了一个环境变量。。。结果,它搞砸了我的
路径
。删除了这一行,然后又出现了一个问题:在监控脚本中,我调用了
python
,但应该调用
python3

如何启动此脚本?我猜您运行的用户环境在某种程度上与交互环境不同。最可能的原因是您在这两个环境中设置了不同的PYTHONPATH环境变量——在运行Python代码之前,请尝试将其打印出来,看看是否不同

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

这些可能不同的一个原因是,脚本工作的交互环境从.profile文件中获取这些或其他配置。.profile仅由登录shell读取,而不是由其他shell读取。将这些内容放在.bashrc而不是.profile中可能会有所不同


(不用说,如果您在这两个环境中以不同的用户身份运行,那么相关的环境变量需要出现在两个用户的配置中。)

您如何启动此脚本?我猜您运行的用户环境在某种程度上与交互环境不同。最可能的原因是您在这两个环境中设置了不同的PYTHONPATH环境变量——在运行Python代码之前,请尝试将其打印出来,看看是否不同

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

这些可能不同的一个原因是,脚本工作的交互环境从.profile文件中获取这些或其他配置。.profile仅由登录shell读取,而不是由其他shell读取。将这些内容放在.bashrc而不是.profile中可能会有所不同


(不用说,如果您在这两个上下文中以不同的用户身份运行,那么相关的环境变量需要出现在两个用户的配置中。)

只是想看看从
bash
脚本方面看情况是否良好,您是否尝试打印这些值以查看它们是否良好,还要双引号引用您的参数,
python“$pythonscriptlocation”“$path”“$file”
@ini谢谢,但是我已经设法找出了问题所在…您应该始终使用独立的python开发环境,例如
virtualenv
conda
。只是想看看从
bash
脚本方面看事情是否正常,您是否尝试打印值以查看它们是否正常,是否还双重引用了您的参数,
python“$pythonscriptlocation”“$path”“$file”
@Inian谢谢,但我已经设法找出了问题所在……您应该始终使用独立的python开发环境,例如
virtualenv
conda
。我发现了Anaconda(我以前安装过)在
.bashrc
中添加了一行内容,这会弄乱我的路径。非常感谢。我还发现我必须调用
python3
,而不是
python
。。。真他妈烦躁!一个接一个的问题#rantover.我发现Anaconda(我以前安装过)在
.bashrc
中添加了一行,这把我的路径弄得一团糟。非常感谢。我还发现我必须调用
python3
,而不是
python
。。。真他妈烦躁!一个接一个的问题#兰托弗。