我目前在Python代码中使用基于Unix的可执行文件来分析一些DNA序列。运行分析后,此特定可执行文件将输出写入文件,然后由我的代码读取并从中获取相关值。
由于除了产生某些值之外不需要任何文件,因此我决定将其作为临时文件,在从中获取必要信息后将删除该文件。但是,我为实现这一目标而设置代码的努力已经证明是徒劳的。
import subprocess as sb
import tempfile
def calculate_complex_mfe(DNA_seq):
complex_seq= str(DNA_seq)
with tempfile.NamedTemporaryFile as mfefile:
p= sb.Popen(['/Users/john/Documents/Biology/nupack3.0.6/bin/mfe', '-T', '41'], stdin=sb.PIPE, stdout=sb.PIPE, env=my_env)
strb = (mfefile+'\n'+ complex_seq + '\n').encode('utf-8')
data = p.communicate(input=strb)
mfe= float(open(mfefile+'.mfe').readlines()[14])
return mfe
我应该注意,strb变量的设置与可执行文件运行所需的格式相匹配。同样对于它的价值,我使用的原始代码正确运行在下面。
def calculate_complex_mfe(DNA_seq):
complex_seq= str(DNA_seq)
filename= "mfe-file"
p= sb.Popen(['/Users/john/Documents/Biology/nupack3.0.6/bin/mfe', '-T', '41'], stdin=sb.PIPE, stdout=sb.PIPE, env=my_env)
strb = (filename+'\n'+ complex_seq + '\n').encode('utf-8')
data = p.communicate(input=strb)
mfe= float(open(filename+'.mfe').readlines()[14])
return mfe
有人能告诉我如何为可执行文件的输出创建一个临时文件,以便从中获取一些值吗?
答案 0 :(得分:1)
来自文档:
NamedTemporaryFile(mode ='w + b',buffering = -1,encoding = None,newline = None,suffix ='',prefix ='tmp',dir = None,delete = True) 创建并返回一个临时文件。
返回具有类文件接口的对象;文件的名称 可以作为file.name访问。该文件将被自动删除 当它被关闭时,除非'delete'参数设置为False。
您不需要写入文件句柄,只需要创建临时文件名称,而不是打开临时文件。只需替换:
filename= "mfe-file"
通过
filename = tempfile.mktemp()
在您的第二个代码段中为您生成临时文件名(完整路径)
当你完成它时,不要忘记os.remove(filename)
。