Не могу получить bash для работы с python на SGE

791
AdrienNK

В настоящее время я работаю над SGE, и я крайне незнаком со средой Linux. Я должен выполнить сценарии Python, но установка меня немного смущает, и я не могу заставить ее работать.

Установка следующая: по умолчанию установлен Python 2.4, и мне нужно использовать 2.7 с некоторыми библиотеками.

Затем я связал все, что мне нужно, с этими строками:

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его, исполняется мой код, и он прекрасно связывает все.

Тогда, если я попытаюсь сделать скрипт bash (подходящий для отправки в SGE), он не будет работать

': [Errno 2] No such file or directory 

Вот сценарий

#!/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 

Это даже не будет работать, если я удалил строки, связанные с SGE, и я делаю $ 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 

Если бы кто-то мог заставить меня понять, почему это не работает, это было бы действительно здорово, спасибо!

1

1 ответ на вопрос

1
chepner

Your bash script has DOS line endings, but bash expects Unix-style line endings (just a line-feed, not a carriage-return/line-feed pair. You'll need to remove them; dos2unix is a good tool to use, as it tr -d '\r'.

Specifically, it appears the error message comes from

python test.py 

since bash takes the carriage return following the y in test.py as part of the file name. The "real" error message consists of the bytes

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

but the \r, when displayed at the terminal, causes the cursor to return to the beginning of the line, so that the rest of the error message starting at ': [Errno 2]... overwrites the preceding part, producing as you saw

': [Errno 2] No such file or directory 
Вау спасибо. Я бы никогда не нашел это сам! AdrienNK 10 лет назад 0