我不得不在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
型
产生第二个错误。
我很乐意提供更多的代码,如果需要的话,但脚本很长,我宁愿不附加整个事情!
多谢了!
1条答案
按热度按时间watbbzwu1#
Windows不允许您打开已打开的文件进行写入。
NamedTemporaryFile
为您提供了一个可写入的文件对象。请在with
子句中使用该对象,并在进行子进程调用之前关闭该文件,以确保该文件已被刷新并且可由被调用的程序使用。这将使您返回到默认的delete=True
,以便在with
调用时清除临时文件。则终止。字符串