argparse

pythonのargparseのオプションと関数の引数の乖離を実際の処理を呼ばずに確認する方法を考えてみる

argparseをそのまま使うと以下の様な形になる。色々な書き方があるが、個人的にはflag部分はキーワード引数を使った関数定義にして、parse_args()で返ってきた値をそのまま使わずに**paramsで適用する形が好み。 def hello(*, name: str) -> None: print(f"h…

pythonでimportが長めのコマンドをbulk action的に実行したい

例えば以下の様な感じで雑にシェル上でループしてコマンドを実行することがあったりすると思います。 $ for i in `seq 10`; do python xxx.py `pintf "%02dfile.txt" $i`; done あるいは $ ls *.txt | xargs -I{} python xxx.py {} こういうときに例えばimpo…

今pythonでCLIの設定ファイルと付き合うならpydanticを使うかも?

argparse関連の記事を最近色々書いてきたけれど。そういえば設定ファイルとの付き合い方については書いていなかった。今ならどうやって付き合うかなーということのメモ。 ここでの設定ファイルとはファイル名がコマンドライン引数として渡されて、それを読み…

コマンドライン引数によって、オプションが変わるコマンドの書き方のメモ(2 phase parse?) (updated)

過去にこのような記事を書いた。 コマンドライン引数によって、オプション引数が変わるコマンドの書き方のメモ(2 phase parse?) 今ならどうするだろう?という記事。 これはsubcommandに他ならない 元の記事では以下の様な実行の仕方を許容しているようだ。-…

pythonのargparseでのファイル入出力のちょっとだけ気になる点

pythonのargparseでのファイル入出力には、ちょっとだけ気になる点があります。これはそれらについてのメモです。 ファイル入力と標準入力を一緒に使う場合 以下のような形で入力を使いたい場合があると思います。 引数としてファイルを取る ファイルが渡さ…

コマンドライン引数によって、オプション引数が変わるコマンドの書き方のメモ(2 phase parse?)

コマンドライン引数によって、オプション引数が変わる? 例えば --fn というオプションを取り、このオプションが fのときとgのときとで引数が変わるようなもの --fn無し --fn f --fn g # --fn 無し $ python 03cli.py usage: 03cli.py [--verbose] [--name NA…

argparseで--limitと--no-limitのような相互排他なオプションの定義の仕方のメモ

ドキュメントを見れば分かることだけれど、たまに忘れるので。 import argparse def parse(argv=None): parser = argparse.ArgumentParser() limit_group = parser.add_mutually_exclusive_group() limit_group.add_argument("--limit", dest="limit", type=…

argparseでsubcommandを作るためのユーティリティ

サブコマンドを作る時に何らかのライブラリに依存して良いならclickがオススメではあるけれど。 使いたくない場合もあったりする。そういう時にどうするとまだましになるかみたいな事を考えたりしていた。 argparseでのサブコマンド argparseでのサブコマン…

コマンドに全てのオプションを設定で渡すのがだるいので、設定ファイルでデフォルトの設定を指定したかった

はじめに # オプション引数がないとなんだかわからない myapp foo bar boo baz bee # オプション引数を指定できると楽 myapp --foo=foo --bar=bar --boo=boo --baz bee # でも、本当は以下の様にして使いたい myapp bee --config=~/.config/myapp argparseな…

argparseだるいし。関数の定義からコマンド生成すれば良いのでは?

要旨は以下 関数の引数の定義から大まかなデフォルト値とコマンドライン引数を取得 sphinxのautodoc形式のdocstringからヘルプメッセージを作成 以下の様にすると greeting() が関数からコマンドになる。 # -*- coding:utf-8 -*- from cmdfromfn import as_c…