从Bash脚本调用python脚本

问题描述:

我试图从bash脚本调用python脚本。只有当我尝试从bash脚本运行.py时才会出现导入错误。如果我用python myscript.py运行,一切都很好。这是我的bash脚本:从Bash脚本调用python脚本

while true; do 
    python script.py 

    echo "Restarting..."; 
    sleep 3; 
done 

的错误,我得到:

Traceback (most recent call last): 
    File "script.py", line 39, in <module> 
    from pokemongo_bot import logger 
    File "/Users/Paolo/Downloads/folder/t/__init__.py", line 4, in <module> 
    import googlemaps 
ImportError: No module named googlemaps 
+1

我想你之所以会得到低报酬的原因是因为这个错误与你的script.py没有一个名为googlemaps的模块,当你试图导入googlemaps时。 – Alastair

+0

另请参阅:http://*.com/questions/7332299/trace-python-imports – jmunsch

+0

同时使用'virtualenv'或'venv'通常也很有帮助。 – jmunsch

您的问题是在脚本本身,你的bash代码是OK!如果你没有问题直接从bash运行python scrip.py,你应该测试你是否对这两个调用使用同一个解释器。您可以检查python脚本中的shebang行,它是文件中的第一行,例如#!/usr/bin/env python#!/usr/bin/python,并且在输出不同的情况下将其与which python命令的输出进行比较尝试更改或将shebang行添加到文件中。如果你在bash中直接调用文件./some_script.py bash会读取第一行,如果是shebang行,他将执行文件的特定命令。我的观点是,如果你使用两个不同的解释器直接调用文件python script.py和间接./script.py其中一个可能没有适当的python模块。

HOWTO代码:

$ which python 
/usr/local/bin/python 

所以第二行是为您解释打造家当从它在你的脚本文件本的第一行写的路径。

#!/usr/local/bin/python 
+0

bash:#!/ bin/bash python:#!/ usr/bin/env python .... should I change是这样的? – Levenlol

+0

如果python script.py工作更新的答案应该使其工作。 – flipvarga

还有更多这个故事是不是在你的问题。 您的PYTHONPATH变量在某处一直在困惑。
插入一对夫妇的快速测试线:

在bash

echo $PYTHONPATH 
在你的Python

import os 
print os.environ["PYTHONPATH"] 

在某一点上,路径的GoogleMaps迷路了。