Argparse 重新打开文件。

Argparse Reopening file.

我正在使用 argparse 模块,并且我有一个不断附加到的日志文件。我想打开 args.file,对内容做一些处理,然后关闭它,过一段时间再打开。

一段代码示例:

import argparse
import time
parser = argparse.ArgumentParser()
parser.add_argument('file',type=file)
args = parser.parse_args()

for _ in range(3):
    data = args.file.read()
    print data
    time.sleep(3)

请注意,args.file.seek(0) 不是此处的解决方案。我可以使用 args.file.close() 关闭文件,但如何再次打开它?

我可以使文件名参数只是文件名的普通字符串,但我想知道一个将参数类型保持为文件名的解决方案。

您可以使用

再次打开它
args.file = open(args.file.name)
parser.add_argument('file',type=file)

不代表,the argument is to be a file。意思是

value = file(astring)
args.file = value

type参数是一个对字符串进行操作的函数。在 Python3 file 中已被删除;等价于:

parser.add_argument('file',type=open)

有一个 argparse.FileType class 可以用来打开具有定义模式的文件;它还识别 - 值。这在接受输入和输出但几乎不做其他事情的小脚本中很有用。但通常最好自己打开文件,最好是在 with 上下文中,因此确保在不再使用时将其关闭。

parser.add_argument('file_name')
args = parser.parse_args()

for _ in range(3):
    with open(args.file_name) as f:
        data = f.read()
    print data
    time.sleep(3)

Filetype 的作用是在文件无法打开时给出 'nice' argparse 错误消息。例如,如果名称在命令行中输入错误。