gpt4 book ai didi

perl - 如何在程序意外停止时自动删除使用 File::Temp 创建的文件?

转载 作者:行者123 更新时间:2023-12-05 01:17:29 25 4
gpt4 key购买 nike

我正在使用 File::Temp 创建临时文件。当程序正常退出时,我的临时文件会自动删除。我希望当我的程序用 ctrl+c 停止时会发生同样的情况。它不是。

这是一个演示我的问题的简单程序。

所需的行为是这样的。我怎样才能实现它?我在 Linux 上。

  • 关闭文件句柄时不删除临时文件(ok)
  • 程序正常退出时临时文件被删除(ok)
  • 当程序使用 ctrl+c 退出时临时文件被删除(不工作)

  • .
    #!/usr/bin/perl -l

    use warnings; use strict;
    use File::Temp qw(tempfile tmpfile);

    my $fh = File::Temp->new;
    close $fh;

    -f "$fh" || die "$fh does not exist";
    print "hit enter and the file will be deleted";
    print "hit ctrl+c and it won't";
    print "verify with ls $fh after program exits";
    readline STDIN;

    编辑 1

    我测试了临时文件的行为。似乎确认 Linux 支持我正在寻找的内容(将文件标记为临时/取消链接打开的文件)。我似乎以某种方式理想化了 File::Temp。
    # program will die because os deletes tmpfile after close
    my $fh = tempfile;
    close $fh;
    stat $fh || die;
    readline STDIN;

    最佳答案

    导致 Control_C 键盘中断运行您的 END块,您将需要添加一个信号处理程序。比较以下行为:

    perl -E 'END{say "END"};<STDIN>'

    和:
    perl -E '$SIG{INT}=sub{die};END{say "END"};<STDIN>'

    来自 perlmod
    An END code block is executed as late as possible, that is, after perl has
    finished running the program and just before the interpreter is being exited,
    even if it is exiting as a result of a die() function. (But not if it's
    morphing into another program via exec, or being blown out of the water by a
    signal--you have to trap that yourself (if you can).)

    关于perl - 如何在程序意外停止时自动删除使用 File::Temp 创建的文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13405047/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com