我有以下功能,它已經運行了好幾個月。我沒有更新我的Python版本(除非它發生在幕後?)。爲什麼python不再等待os.system完成?
def Blast(type, protein_sequence, start, end, genomic_sequence):
result = []
M = re.search('M', protein_sequence)
if M:
query = protein_sequence[M.start():]
temp = open("temp.ORF", "w")
print >>temp, '>blasting'
print >>temp, query
temp.close()
cline = blastp(query="'temp.ORF'", db="DB.blast.txt",
evalue=0.01, outfmt=5, out=type + ".BLAST")
os.system(str(cline))
blast_out = open(type + ".BLAST")
string = str(blast_out.read())
DEF = re.search("<Hit_def>((E|L)\d)</Hit_def>", string)
我收到blast_out=open(type+".BLAST")
找不到指定文件的錯誤。該文件被創建爲os.system
調用所調用的程序輸出的一部分。這通常需要大約30秒左右才能完成。但是,當我嘗試運行該程序時,它會立即發出上面提到的錯誤。
我以爲os.system()
應該等待完成?
我應該以某種方式強制等待嗎? (我不想硬編碼等待時間)。
編輯: 我已經在命令行版本的BLAST程序中運行了cline輸出。一切似乎都很好。
嘗試在'system'和'open'之間加入60秒的等待時間。如果問題仍然存在,那麼外部程序以某種方式失敗 –
您也可以從os.system調用中打印出返回值,這應指示程序是否失敗。通常是:0 =確定; > 0 = not OK –
此外,請考慮使用['subprocess'](http://docs.python.org/2/library/subprocess.html) - 它具有更好的處理系統調用產生的錯誤的能力,並且通常應該用[代替'os.system'](http://docs.python.org/2/library/subprocess.html#replacing-os-system)。 –