2017-03-02 97 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