Python の argparse と shlex でコマンドライン以外の文字列解析に使う
parse_args は文字列のリストを引数にとれます。
import argparse
parser = argparse.ArgumentParser()
parser.add_argument('name')
parser.add_argument('--age', '-a', type=int)
args = parser.parse_args(['Alice', '--age', '28'])
print(args)
# Namespace(name='Alice', age=28)コマンドライン以外でも、Python の argparse を文字列の解析に使えます。例えば
import argparse
def parse_text(text: str):
parser = argparse.ArgumentParser()
parser.add_argument('name')
parser.add_argument('--age', '-a', type=int)
items = text.split(' ')
return parser.parse_args(items)
args = parse_text('Alice --age 28')
print(args)
# Namespace(name='Alice', age=28)といった関数もつくれます。
shlex
しかしこのままでは、半角スペースを含む引数に対応できません。
import argparse
def parse_text(text: str):
parser = argparse.ArgumentParser()
parser.add_argument('name')
parser.add_argument('--age', '-a', type=int)
items = text.split(' ')
return parser.parse_args(items)
args = parse_text('"Alice in Wonderland" --age 28')
print(args)
# error: unrecognized arguments: in Wonderland"shlex ライブラリの split はダブルクォーテーションなどを含む文字列を正確に分割します。
import argparse
import shlex
def parse_text(text: str):
parser = argparse.ArgumentParser()
parser.add_argument('name')
parser.add_argument('--age', '-a', type=int)
items = shlex.split(text)
print(items)
return parser.parse_args(items)
args = parse_text('"Alice in Wonderland" --age 28')
print(args)
# ['Alice in Wonderland', '--age', '28']
# Namespace(name='Alice in Wonderland', age=28)


