繁体   English   中英

如何使子流程对象将输出保存到临时文件,然后从临时文件获取值?

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM