首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >如何在满足条件的情况下使用argparse.FileType打开文件?

如何在满足条件的情况下使用argparse.FileType打开文件?
EN

Stack Overflow用户
提问于 2015-04-13 05:22:39
回答 1查看 1.3K关注 0票数 0

我使用的是python 3 argparse。我有多个文件作为argparse.FileType传递,我用它来写一些数据。我想检查一些条件,只有在满足这些条件时才打开这些文件。然而,argparse会立即打开它们,即使我退出时返回错误代码,它们也会被创建。

代码语言:javascript
运行
复制
import argparse
from sys import exit

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('--condition', action='store_true')
    parser.add_argument('out1', type=argparse.FileType('w'))
    parser.add_argument('out2', type=argparse.FileType('w'))

    args = parser.parse_args()

    if not args.condition:
        print('ERROR: please use --condition')
        exit(2)

    args.out1.write('hello\n')
    args.out2.write('world\n')

if __name__ == '__main__':
    main()

如果我在不传递--condition参数的情况下运行这个示例,它仍然会创建两个新文件。在这种情况下,我不想创建它们。我可以在不传递文件名和手动打开文件的情况下这样做吗?

EN

回答 1

Stack Overflow用户

发布于 2015-04-13 06:05:48

最简单的事情就是接受文件名作为默认的字符串类型,然后打开文件。

http://bugs.python.org/issue13824 (argparse.FileType opens a file and never closes it)实现了一个FileContext类型,它的操作方式类似于FileType,只是它返回了一个context,以后可以将其用作:

代码语言:javascript
运行
复制
with args.input() as f:
    f.read()
    etc

但是,在解析时执行文件名检查,而不实际打开或创建文件,这并不是微不足道的。并且处理不应该关闭的stdin/out增加了复杂性。

在这个bug问题中,argparse开发人员Steven Bethard指出,FileType是为快速脚本而设计的,而不是为那些需要正确打开和关闭文件的大型项目而设计的。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29594798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档