通常、次の 2 つのタスクのいずれかを実行する必要があるスクリプトがあります。
1) ワイルドカード展開から展開されたパスを持つ一連のファイルを処理します。
2) 明確なパスを持つ特定のファイルを処理します。
ワイルドカード展開を処理するために glob を使用してきましたが、これは問題を引き起こします。glob は実際に存在するパスのみを返すため、存在しないファイルへの特定のパスがユーザーによって指定された場合、コードはエラーを生成しません。
以下は、コードの最小限の作業例 (MWE) です。MWE は、ワイルドカードから展開された既存のファイルを喜んで処理しますが、glob は既存のパスしか返さないため、目的のエラー メッセージを生成しません。
#!/usr/bin/env python3
import argparse, glob, sys, os
parser = argparse.ArgumentParser()
parser.add_argument("src_path", metavar="path", type=str,
help="Path to files to be merged; enclose in quotes, accepts * as wildcard for directories or filenames")
args = parser.parse_args()
files = glob.iglob(args.src_path)
for file in files:
try:
with open(file, 'r') as f:
sys.stdout.write('File exists: ' + file + '\n')
except IOError:
sys.stderr.write('File does not exist: ' + file + '\n')
これを変更して、希望どおりに動作させるにはどうすればよいですか?