我有一个我想要自动化的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]
答案 0 :(得分:1)
引发NameError异常,因为全局变量&#34; geneDict&#34;没有在python脚本中定义。见https://docs.python.org/2/library/exceptions.html#exceptions.NameError