2016-09-05 112 views
0

我正在使用argparse模塊,並且有一個連續追加到的日誌文件。我想打開args.file,對內容做些什麼,然後關閉它並在一段時間後再次打開它。Argparse重新打開文件。

一個例子的代碼:

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()關閉文件,但是如何再次打開它?

我可以使文件名參數只是一個普通的文件名字符串,但我想知道一個解決方案保持argumenttype作爲文件名。

+0

我認爲使用字符串類型和每次打開文件都更清潔。 –

回答

1
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;它也承認-的價值。這對於輸入輸出的小腳本非常有用,而且幾乎沒有其他功能。但通常最好自己打開文件,最好在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是給一個「好」 argparse錯誤信息,如果該文件無法打開。例如,如果名稱在命令行中輸入錯誤。

0

你可以再次使用

args.file = open(args.file.name)