调用临时文件的python脚本在Windows中不起作用,在Ubuntu中起作用

问题描述 投票:0回答:1

我不得不在 Windows 中临时使用脚本,而不是我常用的 Ubuntu。我发现由于调用“tempfile”在 Windows 中不起作用,脚本无法运行。我附上了下面的片段。我在哪里收到错误

文件“phys_features_windows.py”,第 70 行,位于 extract_LCR 中 以 open(tmp_LCR.name, 'w') 作为 f_LCR: PermissionError: [Errno 13] 权限被拒绝: 'C:\Users\Henry\AppData\Local\Temp mpz6wx32mx'

我还尝试了建议调用“delete=False”的调整,但这只是将错误更改为

FileNotFoundError: [WinError 2] 系统找不到指定的文件

在“出”线

我假设文件创建在Windows中的工作方式不同,或者文件的调用方式不同,因此脚本找不到临时文件 - 但不幸的是,在进一步测试和阅读后我找不到解决方案。任何帮助将不胜感激!

非常感谢

原代码:

def extract_LCR(seq):
    tmp_LCR = tempfile.NamedTemporaryFile(delete=False, delete_on_close=False) #flag for windows
    with open(tmp_LCR.name, 'w') as f_LCR:
         f_LCR.write('>1\n' + str(seq))
    tmp_LCR.seek(0)

    out = subprocess.Popen(['segmasker', '-in', str(tmp_LCR.name)],
           stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

第 2 行更改为

tmp_LCR = tempfile.NamedTemporaryFile(delete=False, delete_on_close=False) #flag for windows

产生第二个错误。

如果需要,我很乐意提供更多代码,但脚本很长,我不想附加整个内容!

非常感谢!

python windows temporary-files
1个回答
0
投票

Windows 不会让您打开已打开的文件进行写入。

NamedTemporaryFile
给你一个可写的文件对象。在
with
子句中使用它,并在进行子进程调用之前关闭文件,以确保文件已被刷新并且可供被调用的程序使用。这会将您带回默认值
delete=True
,以便在
with
终止时清除您的临时文件。

def extract_LCR(seq):
    with tempfile.NamedTemporaryFile("w", delete_on_close=False) as tmp_LCR: #flag for windows
        tmp_LCR.write('>1\n' + str(seq))
        tmp_LCR.close()
        out = subprocess.Popen(['segmasker', '-in', str(tmp_LCR.name)],
           stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
        out.communicate()
© www.soinside.com 2019 - 2024. All rights reserved.