- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我在包的函数中使用 tempfile()
,因此用户将创建新文件。我不想留下烂摊子。
R 是否会自动删除在使用 tempfile()
访问的目录中创建的文件,还是必须手动删除这些文件?
如果文件被自动删除,这种情况发生的依据是什么(例如,R session 结束、关闭 RStudio 后、一段时间间隔后或其他情况?)
显然,用一些额外的代码删除它们并不难(相关文章: https://stackoverflow.com/a/56715074/680068 ),但如果它们是通过某些现有进程自动处理的,我会避免这种情况。
最佳答案
(所有这些都假设您使用 tmpdir
的默认参数,并且为您的操作系统正常设置了 TEMP
环境变量。)
tl;dr 每当 R_CleanTempDir
运行时(如 R session 终止时),临时文件都会被删除
通过删除临时目录tempdir()
来删除临时文件。这是通过内部函数 R_CleanTempDir
发生的(链接指向 UNIX 实现)。这可以通过各种实例调用,但最常见的情况是通过quit
(完整链见下文)。为了回答您的问题,临时文件将在 R session 的“正常”退出下被删除。 (“正常”是为了避免诸如不合时宜的停电以及“自杀”之类的事情。)
事实上,?quit
的帮助文件中提到了这一点:
Exactly what happens at termination of an R session depends on the platform and GUI interface in use. A typical sequence is to run .Last() and .Last.sys() (unless runLast is false), to save the workspace if requested (and in most cases also to save the session history: see savehistory), then run any finalizers (see reg.finalizer) that have been set to be run on exit, close all open graphics devices, remove the session temporary directory and print any remaining warnings (e.g., from .Last() and device closure).
按照该帮助文件中的建议,您可能想看看 reg.finalizer
是否对您的问题有帮助。
在某些情况下tempdir()
may be deleted during long-running R session ,但为了保证删除临时文件,您必须在 session 中显式删除它们或退出 session 。
do_quit
SEXP attribute_hidden do_quit(SEXP call, SEXP op, SEXP args, SEXP rho)
{
const char *tmp;
SA_TYPE ask=SA_DEFAULT;
int status, runLast;
checkArity(op, args);
/* if there are any browser contexts active don't quit */
if(countContexts(CTXT_BROWSER, 1)) {
warning(_("cannot quit from browser"));
return R_NilValue;
}
if( !isString(CAR(args)) )
error(_("one of \"yes\", \"no\", \"ask\" or \"default\" expected."));
tmp = CHAR(STRING_ELT(CAR(args), 0)); /* ASCII */
if( !strcmp(tmp, "ask") ) {
ask = SA_SAVEASK;
if(!R_Interactive)
warning(_("save=\"ask\" in non-interactive use: command-line default will be used"));
} else if( !strcmp(tmp, "no") )
ask = SA_NOSAVE;
else if( !strcmp(tmp, "yes") )
ask = SA_SAVE;
else if( !strcmp(tmp, "default") )
ask = SA_DEFAULT;
else
error(_("unrecognized value of 'save'"));
status = asInteger(CADR(args));
if (status == NA_INTEGER) {
warning(_("invalid 'status', 0 assumed"));
status = 0;
}
runLast = asLogical(CADDR(args));
if (runLast == NA_LOGICAL) {
warning(_("invalid 'runLast', FALSE assumed"));
runLast = 0;
}
/* run the .Last function. If it gives an error, will drop back to main
loop. */
R_CleanUp(ask, status, runLast);
exit(0);
/*NOTREACHED*/
}
调用R_CleanUp
,它又调用R_CleanTempDir
:
void R_CleanUp(SA_TYPE saveact, int status, int runLast)
{
if(saveact == SA_DEFAULT) /* The normal case apart from R_Suicide */
saveact = SaveAction;
if(saveact == SA_SAVEASK) {
if(R_Interactive) {
switch (R_YesNoCancel(G_("Save workspace image?"))) {
case YES:
saveact = SA_SAVE;
break;
case NO:
saveact = SA_NOSAVE;
break;
case CANCEL:
// There might be residual events with destroyed handles
R_ProcessEvents();
jump_to_toplevel();
break;
}
} else saveact = SaveAction;
}
switch (saveact) {
case SA_SAVE:
if(runLast) R_dot_Last();
if(R_DirtyImage) R_SaveGlobalEnv();
if (CharacterMode == RGui) {
R_setupHistory(); /* re-read the history size and filename */
wgl_savehistory(R_HistoryFile, R_HistorySize);
} else if(R_Interactive && CharacterMode == RTerm) {
R_setupHistory(); /* re-read the history size and filename */
gl_savehistory(R_HistoryFile, R_HistorySize);
}
break;
case SA_NOSAVE:
if(runLast) R_dot_Last();
break;
case SA_SUICIDE:
default:
break;
}
R_RunExitFinalizers();
editorcleanall();
CleanEd();
KillAllDevices(); /* Unix does not do this under SA_SUICIDE */
AllDevicesKilled = TRUE; /* used in devWindows.c to inhibit callbacks */
R_CleanTempDir(); /* changes directory */
if (R_Interactive && CharacterMode == RTerm)
SetConsoleTitle(oldtitle);
if (R_CollectWarnings && saveact != SA_SUICIDE
&& CharacterMode == RTerm) /* no point in doing this for Rgui
as the console is about to close */
PrintWarnings(); /* from device close and (if run) .Last */
app_cleanup();
RConsole = NULL;
// Add some protection against calling this more than once:
// caused by signals on Unix, so maybe cannot happen here.
if(ifp) {
fclose(ifp); /* input file from -f or --file= */
ifp = NULL;
}
if(ifile[0]) {
unlink(ifile); /* input file from -e */
ifile[0] = '\0';
}
exit(status);
}
关于r - 在 R 中使用 tempfile() 创建的临时文件会发生什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58095164/
我需要创建一个临时目录来存放另一个命名目录和子文件。最后,指定的目录和子文件将附加到压缩包中,临时目录可以删除。最初打算使用 mkdtemp()但它看起来像 TemporaryDirectory()方
在 Heroku 托管的 Rails 3 应用程序中,一个多部分文件被发布到我的应用程序,我正在尝试使用一些示例代码: File.open(params['filename'][:tempfile].
有谁知道在 JRuby 中是如何处理 tempfile.rb 的。它在 Ruby 中,但不在 JRuby 中。 有人有任何想法吗? 干杯 埃夫 最佳答案 您仍然可以“要求'tempfile'”并且它会
我目前正在 Ruby 上运行这段代码。 file = Tempfile.new(['tempemail', '.html']) file 'xx' 如果没有 file.close,您将得到一个空字符
谁能告诉我在 python 中使用 tempfile 的好处,在什么情况下我应该使用它? 我正在编写一个程序来处理一个文件,它会先调用另一个脚本来处理该文件,生成一个临时文件并执行下一步,我将自己编写
在上传到新目的地之前,我使用 Tempfile 存储生成的 PDF。 pdf_file = WickedPdf.new.pdf_from_string(msgbody) tempfil
我正在尝试创建一个临时文件并向其中写入一些文本。但是我在控制台中得到了这种奇怪的行为 t = Tempfile.new("test_temp") # => # t # t.write("test d
我们的处理服务器主要与 TempFiles 一起工作,因为它使我们这边的事情变得更容易:无需注意删除它们,因为它们会被垃圾收集或处理名称冲突等。 最近,我们遇到了 TempFiles 在此过程中过早进
我正在更改文件的内容,因此我逐行读取文件,替换我想要的内容并逐行写入临时文件。处理整个文件后,我删除原始文件,并将临时文件重命名为原始文件名。像这样 File orginialFile = new F
我正在使用 django 和 Google App Engine。我无法确定错误来自哪里,因为如果我在本地使用它,我的网站就会正常运行。在我将其部署到 GAE 上之后,它工作正常,但是当使用 goog
我正在使用 tempfile.mkstemp 生成一个随机可用的文件名并使用 os.fdopen 写入一些内容。然后我通过 celery 将文件名传递给任务。 此任务打开文件,处理内容,最后删除文件。
我正在使用 tempfile.NamedTemporaryFile()存储一些文本直到程序结束。在 Unix 上工作没有任何问题,但在 Windows 上返回的文件无法读取或写入:python 给出
我一直在使用带有前缀的 tempfile.mkdtemp 来创建我的临时文件。这导致我的 tmp 文件夹中有很多不同的目录,其中包含“tmp/myprefix{uniq-string}/”。 我想改变
我有一个 GUI (lxn/walk) 应用程序修补程序,它通过 ftp 下载文件,将其流式传输到临时文件并提取内容以更新本地文件。删除文件命令被推迟。 除非用户在下载文件时退出程序,否则文件不会被删
在 python 中,您可以创建一个临时文件,如下所示: tempfile.TemporaryFile() 然后你就可以写信给它了。 GNU/Linux 系统中写入的文件在哪里?我似乎无法在/tmp
我正在编写一个 Python 脚本,该脚本需要创建大约 50 个不同的临时文件,这些文件在脚本执行过程中经常被附加并在最后合并。我确信 tempfile 模块可以满足我的需要,但我无法通过阅读文档来弄
无论如何我可以写入临时文件并将其包含在命令中,然后关闭/删除它。我想执行命令,例如:some_command/tmp/some-temp-file. 非常感谢。 import tempfile tem
我在 Python 中使用 tempfile 和 sqlite3 模块。 以下代码有效: import sqlite3, tempfile conn1 = sqlite3.connect(tempfi
根据 tempfile.mkstemp docs , mkstemp() returns a tuple containing an OS-level handle to an open file (
我想在几天内学习Java。我尝试将内容写入临时文件并将该文件保存在 Windows 中的临时文件夹中(这是我的任务)。我找到了一些解决方案,但对我不起作用:( http://www.mkyong.co
我是一名优秀的程序员,十分优秀!