[英]How to make a subprocess object save output to a temporary file and then obtain values from temporary file?
我目前在我的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
谁能告诉我如何为可执行文件的输出创建一个临时文件,以便从中获取一些值?
从文档中:
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)
。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.