python脚本调用tempfile在windows中不工作,在Ubuntu中工作

uz75evzq  于 7个月前  发布在  Windows
关注(0)|答案(1)|浏览(76)

我不得不在Windows中临时使用脚本,而不是我通常的Ubuntu。我发现脚本无法运行,因为调用“tempfile”在Windows中不起作用。我在下面附上了片段。我在哪里得到错误
文件“phys_features_windows.py”,第70行,在extract_LCR中以f_LCR打开(tmp_LCR.name,“w”):PermissionError:[Errno 13] Permissiondenied:“C:\Users\Henry\AppData\Local\Temp\tmpz6wx32mx”
我还尝试了调用“delete=False”的调整,但这只是将错误改为
[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


产生第二个错误。
我很乐意提供更多的代码,如果需要的话,但脚本很长,我宁愿不附加整个事情!
多谢了!

watbbzwu

watbbzwu1#

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()

字符串

相关问题