我目前正在使用 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
您的bash
脚本有 DOS 行尾,但bash
期望 Unix 样式的行尾(仅是换行符,而不是回车符/换行符对。您需要删除它们;dos2unix
是一个很好的工具,因为它tr -d '\r'
。
具体来说,错误信息似乎来自
python test.py
因为将inbash
后面的回车符作为文件名的一部分。“真正的”错误消息由字节组成y
test.py
python: can't open file 'test.py\r': [Errno 2] No such file or directory
但是\r
,当在终端上显示时,会导致光标返回到行首,因此从开始的其余错误消息将': [Errno 2]...
覆盖前面的部分,产生如您所见的结果
': [Errno 2] No such file or directory