Python脚本不会在bash脚本中运行,但在cmd提示符下运行正常

时间:2017-10-26 18:23:49

标签: python bash cmd

我有一个我想要自动化的python脚本,所以我创建了一个简单的bash脚本(名为mybash.sh)。

#!/bin/sh

vars="C:\Users\Jane\Desktop\Work\variables.csv"

while IFS="," read gname gid
do
    echo "Gene Name: $gname"
    echo "Gene ID: $gid"
    python alignment.py work_file $gid > C:\\Users\\Jane\\Desktop\\Work_Done\\$gname.fa
done < "$vars"

read -rn1

这是一个巨大的脚本,但我总是得到一个错误,说我的alignment.py脚本的最后一行有一个NameError,所以在从windows cmd提示符运行我的bash脚本后,作为&gt; mybash.sh我得到了这个:< / p>

Gene Name: cytb   
Gene ID: ENSB0010011
Traceback (most recent call last):
  File "alignment.py", line 99, in <module>
    for species in geneDict:
NameError: name 'geneDict' is not defined

geneDict是python脚本的最后一部分,它只是为单独文件夹中所有物种的基因创建一个fasta比对文件。 当我在cmd提示符中正常执行python脚本时,它工作得非常好但不是从变量文件中提取gname(基因名称)和gid(基因ID),而是手动输入。我不想为200个基因做到这一点。我无法理解为什么它不再完成并且说不再定义geneDict?

另外,我尝试单独使用bash脚本运行python脚本,如下所示:

#!/bin/sh

python alignment.py work_file ENSB0010011 > C:\\Users\\Jane\\Desktop\\Work_Done\\cytb.fa

这也很好,python脚本并没有突然停止工作,我的文件出来了。如何在没有错误的情况下执行python脚本,同时分别从variables.csv中提取变量,以便我不必手动输入?

python脚本的最后一位如下:

for species in geneDict:    # this is where it says geneDict is not defined
    print '>' + species
    print geneDict[species]

1 个答案:

答案 0 :(得分:1)

引发NameError异常,因为全局变量&#34; geneDict&#34;没有在python脚本中定义。见https://docs.python.org/2/library/exceptions.html#exceptions.NameError