Ich kann keine Bash für die Arbeit mit Python auf einer SGE erhalten

824
AdrienNK

Ich arbeite gerade an einer SGE und bin mit der Linux-Umgebung sehr vertraut. Ich muss Python-Skripts ausführen, aber das Setup ist für mich etwas verwirrend und ich kann es nicht zum Laufen bringen.

Das Setup ist wie folgt: Der Standard-Python ist der 2.4 und ich muss den 2.7 mit einigen Bibliotheken verwenden.

Ich habe dann alles, was ich brauchte, mit diesen Zeilen verknüpft:

export LD_LIBRARY_PATH=/home/volatile/xxx/local/lib:$LD_LIBRARY_PATH export LD_RUN_PATH=/home/volatile/xxx/local/lib:$LD_RUN_PATH export PATH=/home/volatile/xxx/local/bin:$PATH export PYTHONPATH=/home/volatile/xxx/src/scikit-learn:$PYTHONPATH 

Wenn ich dann diese Zeilen python test.pytippe und anrufe, wird mein Code ausgeführt und es verbindet alles großartig.

Wenn ich versuche, ein Bash-Skript zu erstellen (an die SGE zu senden), funktioniert es nicht

': [Errno 2] No such file or directory 

Hier ist das Skript

#!/bin/bash  #$ -N JOB_TKO #$ -l h_vmem=1000M #$ -l h_rt=864000 #$ -S /bin/bash #$ -cwd  unset SGE_ROOT  export LD_LIBRARY_PATH=/home/volatile/xxx/local/lib:$LD_LIBRARY_PATH export LD_RUN_PATH=/home/volatile/xxx/local/lib:$LD_RUN_PATH export PATH=/home/volatile/xxx/local/bin:$PATH export PYTHONPATH=/home/volatile/xxx/src/scikit-learn:$PYTHONPATH  python test.py 

Es funktioniert nicht einmal, wenn ich die Zeilen zu SGE entfernt habe und ich tue $ bash job.sh

#!/bin/bash  export LD_LIBRARY_PATH=/home/volatile/xxx/local/lib:$LD_LIBRARY_PATH export LD_RUN_PATH=/home/volatile/xxx/local/lib:$LD_RUN_PATH export PATH=/home/volatile/xxx/local/bin:$PATH export PYTHONPATH=/home/volatile/xxx/src/scikit-learn:$PYTHONPATH  python test.py 

Wenn mir jemand erklären könnte, warum es nicht funktioniert, wäre das wirklich großartig, danke!

1

1 Antwort auf die Frage

1
chepner

Ihr bashSkript hat DOS-Zeilenenden, basherwartet jedoch Zeilenenden im Unix-Stil (nur ein Zeilenvorschub, kein Wagenrücklauf- / Zeilenvorschubpaar. Sie müssen entfernt werden; es dos2unixist ein gutes Werkzeug, um es zu verwenden tr -d '\r'.)

Insbesondere scheint es, dass die Fehlermeldung stammt

python test.py 

da bashnimmt den Wagenrücklauf nach dem yin test.pyals Teil des Dateinamens. Die "echte" Fehlermeldung besteht aus den Bytes

python: can't open file 'test.py\r': [Errno 2] No such file or directory 

aber das \r, wenn am Endgerät angezeigt wird, bewirkt, dass der Cursor an den Anfang der Leitung zurückzubringen, so dass der Rest der Fehlermeldung beim Starten ': [Errno 2]...überschreibt den vorherigen Teil, produziert, wie Sie sahen

': [Errno 2] No such file or directory 
Woaw danke dir. Ich hätte das nie alleine gefunden! AdrienNK vor 10 Jahren 0