美文网首页
关闭argparse.Filetype打开的文件

关闭argparse.Filetype打开的文件

作者: PythonDeveloper | 来源:发表于2019-05-21 16:43 被阅读0次

最近在命令行中使用了argparse.FileType()来传入一个文件,用于保存脚本处理的结果。代码大概如下。

parser = ArgumentParser()
 parser.add_argument(
        "--output_file",
        type=FileType(mode="w"),
        default=sys.stdout,
        help="The output file of the result",
    )
args = parser.parse_args()

这样args.output_file就可以直接使用进行写入操作了,因为argparse.FileType()在调用时已经帮你把文件打开了。由此想到,它是否把打开的文件在最后关闭了呢?看了一下源码argparse.py,发现它只是将文件打开了,并没有进行关闭操作。具体代码如下。

class FileType(object):
      def __call__(self, string):
        # the special argument "-" means sys.std{in,out}
        if string == '-':
            if 'r' in self._mode:
                return _sys.stdin
            elif 'w' in self._mode:
                return _sys.stdout
            else:
                msg = _('argument "-" with mode %r') % self._mode
                raise ValueError(msg)

        # all other arguments are used as file names
        try:
            return open(string, self._mode, self._bufsize, self._encoding,
                        self._errors)
        except OSError as e:
            message = _("can't open '%s': %s")
            raise ArgumentTypeError(message % (string, e))

这可是标准的库啊,居然管杀不管埋。网上搜了一下,这个居然是个很老的Bug。不知道为什么一直没有修复。
只好自己动手,丰衣足食了。相应的关闭代码如下:

with contextlib.closing(args.output_file) as f:
    something(f)

相关文章

  • 关闭argparse.Filetype打开的文件

    最近在命令行中使用了argparse.FileType()来传入一个文件,用于保存脚本处理的结果。代码大概如下。 ...

  • Python高级 文件操作

    文件打开与关闭 打开文件 open(文件名,访问模式) 关闭文件 close() 访问模式:r ...

  • 文件的应用

    “好记性不如烂笔头” 打开文件(open)open 打开文件 关闭文件(close)close 关闭文件 wr...

  • 7.php文件系统

    文件处理 文件处理包含文件的打开/关闭文件、读取数据、和写入数据等 1. 打开/关闭文件 fopen() -- 打...

  • Python基础(五)

    文件的打开与关闭 操作文件的整体过程: 打开文件,或者新建立一个文件 读/写数据 关闭文件 打开文件 在pytho...

  • C语言对文件操作总结

    文件指针FILE *fp;文件打开与关闭打开:文件指针名 = fopen(文件名,使用文件方式);关闭:fclos...

  • 文件

    一、文件的打开与关闭: *打开:open() *关闭:close() 二、文件的读写: *写:write() *读...

  • Python学习基础知识之 文件的介绍以及常见操作

    目录 一、文件的打开和关闭 1.1打开文件open() 1.2关闭文件close( ) 二、文件的读写 2.1写数...

  • 文件操作

    打开文件 读 关闭文件 写文件

  • Python学习杂记——文件

    打开文件: 关闭文件: 读 写

网友评论

      本文标题:关闭argparse.Filetype打开的文件

      本文链接:https://www.haomeiwen.com/subject/pzvjzqtx.html