2016-07-29 7 views
1

Ich versuche, ein Python-Skript aus einem Bash-Skript aufzurufen. Ich erhalte nur Importfehler, wenn ich versuche, das .py vom Bash-Skript auszuführen. Wenn ich mit python myscript.py laufe, ist alles in Ordnung. Das ist mein Bash-Skript:Aufruf von Python-Skript aus einem Bash-Skript

while true; do 
    python script.py 

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

Der Fehler erhalte ich:

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

Ich denke, der Grund, warum Sie downvotes bekommen, ist, weil der Fehler mit Ihrem script.py zu tun hat kein Modul namens googlemaps, wenn Sie versuchen, googlemaps zu importieren. – Alastair

+0

Siehe: http://stackoverflow.com/questions/7332299/trace-python-imports – jmunsch

+0

Auch die Verwendung von 'virtualenv' oder' venv' ist generell sehr hilfreich. – jmunsch

Antwort

1

Ihr Problem im Skript selbst, Bash-Code ist OK !. Wenn Sie python scrip.py von bash nicht direkt ausführen, sollten Sie testen, ob Sie für beide Aufrufe denselben Interpreter verwenden. Sie können die Shebang-Linie im Python-Skript überprüfen, es ist die erste Zeile in der Datei zum Beispiel #!/usr/bin/env python oder #!/usr/bin/python und vergleichen Sie es mit der Ausgabe von which python Befehl, wenn die Ausgabe anders ist, versuchen Sie zu ändern oder fügen Sie die Shebang-Zeile in die Datei . Wenn Sie direkt Datei in bash aufrufen ./some_script.py Bash liest die erste Zeile und wenn es Shebang Zeile ist, wird er den spezifischen Befehl für die Datei ausführen. Mein Punkt ist, dass, wenn Sie zwei verschiedene Interpreter für den Aufruf der Datei direkt mit python script.py und indirekt ./script.py verwenden, einer von ihnen möglicherweise nicht die richtigen Python-Module haben.

Howto Code:

$ which python 
/usr/local/bin/python 

So ist die zweite Zeile ist der Pfad für die Dolmetscher eine shebang zu bauen daraus diese in der ersten Zeile der Skriptdatei schreiben.

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

bash: #!/Bin/bash python: #!/Usr/bin/env python .... sollte ich ändern etwas so? – Levenlol

+0

Wenn python script.py funktioniert, sollte die aktualisierte Antwort funktionieren. – flipvarga

3

Es gibt mehr zu dieser Geschichte, die nicht in Ihrer Frage ist. Ihre PYTHONPATH Variable wird irgendwo auf dem Weg verwirrt.
ein paar schnelle Testlinien einfügen:

in bash:

echo $PYTHONPATH 

in Ihrer Python:

import os 
print os.environ["PYTHONPATH"] 

Irgendwann wurde der Weg zum Googlemap verloren.