我一直在挣扎这一段时间,我不知道我做错了什么。我试图在容器内运行shell脚本,shell脚本从shell脚本所在的目录中读取python脚本。但我得到这个错误说`python:无法打开文件'get_gene_length_filter.py':[Errno 2]没有这样的文件或目录'。
这是我的Dockerfile:
FROM ubuntu:14.04.3
RUN apt-get update && apt-get install -y g++ \
make \
git \
zlib1g-dev \
python \
wget \
curl \
python-matplotlib \
python-numpy \
python-pandas
ENV BINPATH /usr/bin
ENV EVO2GIT https://upendra_35@bitbucket.org/upendra_35/evolinc_docker.git
RUN git clone $EVO2GIT
WORKDIR /evolinc_docker
RUN chmod +x evolinc-part-I.sh && cp evolinc-part-I.sh $BINPATH
RUN wget -O- http://cole-trapnell-lab.github.io/cufflinks/assets/downloads/cufflinks-2.2.1.Linux_x86_64.tar.gz | tar xzvf -
RUN wget -O- https://github.com/TransDecoder/TransDecoder/archive/2.0.1.tar.gz | tar xzvf -
ENV PATH /evolinc_docker/cufflinks-2.2.1.Linux_x86_64/:$PATH
ENV PATH /evolinc_docker/TransDecoder-2.0.1/:$PATH
ENTRYPOINT ["/usr/bin/evolinc-part-I.sh"]
CMD ["-h"]
这是我的git repo代码:
#!/bin/bash
# Create a directory to move all the output files
mkdir output
# Extracting classcode u transcripts, making fasta file, removing transcripts > 200 and selecting protein coding transcripts
grep '"u"' $comparefile | gffread -w transcripts_u.fa -g $referencegenome - && python get_gene_length_filter.py transcripts_u.fa \
transcripts_u_filter.fa && TransDecoder.LongOrfs -t transcripts_u_filter.fa
这就是我的运作方式:
docker run --rm -v $(pwd):/working-dir -w /working-dir ubuntu/evolinc -c AthalianaslutteandluiN30merged.gtf -g TAIR10_chr.fasta
答案 0 :(得分:3)
我要猜测并假设get_gene_length_filter.py
在/evolinc_docker
中,工作目录在Dockerfile中声明。不幸的是,当您运行docker run ... -w /working-dir ...
时,工作目录将为/working-dir
,因此Python将在get_gene_length_filter.py
中寻找/working-dir
,但显然找不到它。编辑您的shell脚本,以完整的绝对路径引用get_gene_length_filter.py
:python /evolinc_docker/get_gene_length_filter.py
。
答案 1 :(得分:1)
您的陈述
shell脚本从shell脚本所在的目录中读取python脚本。
错了。
在您的shell script中,当您致电python get_gene_length_filter.py
时,不会假定get_gene_length_filter.py
文件与shell脚本位于同一目录中,而是假设其处于当前工作状态。目录
描述相对于当前shell脚本目录的路径use a variable set as follow:
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
然后你会用:
调用你的python脚本python $SCRIPT_DIR/get_gene_length_filter.py
这样,无论工作目录是什么,shell脚本都可以正常工作。