Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何使子流程对象将输出保存到临时文件,然后从临时文件中获取值?_Python_Subprocess_Temporary Files - Fatal编程技术网

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

Python 如何使子流程对象将输出保存到临时文件,然后从临时文件中获取值?,python,subprocess,temporary-files,Python,Subprocess,Temporary Files,我目前正在Python代码中使用一个基于Unix的可执行文件来分析一些DNA序列。运行分析后,这个特定的可执行文件将输出写入一个文件,然后由我的代码读取该文件,并从中获取相关值 由于该文件除了产生一些值之外,不需要其他任何东西,因此我决定将其作为一个临时文件,在从中获取必要信息后将其删除。然而,我建立代码以实现这一点的努力被证明是徒劳的 import subprocess as sb import tempfile def calculate_complex_mfe(DNA_seq):

我目前正在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"

在第二个代码段中,为您生成临时文件名(完整路径)


不要忘了
os。完成后删除(文件名)
它。

谢谢你的提示!但是该代码不会运行,因为行
os.remove(filename)
产生一个错误
没有这样的文件或目录
。我试图用一个表示文件存储路径的变量替换
filename
,但它仍然不起作用。我怎样才能改善它呢?好吧,我现在开始工作了。。。我必须添加
filename=tempfile.mktemp(dir=current_directory)
,还要添加
os.remove(filename+'.mfe')
,以便让代码最终正常工作。
filename = tempfile.mktemp()