私はすべてのドキュメントを見てきましたが、それを行う方法はないようですが、次のようになります。
Sys.argvだけでなく、文字列のリストでargparseを使用する方法はありますか?
これが私の問題です。次のようなプログラムがあります。
# This file is program1.py
import argparse
def main(argv):
parser = argparse.ArgumentParser()
# Do some argument parsing
if __name__ == '__main__':
main(sys.argv)
これは、このプログラムがコマンドラインから直接呼び出された場合に正常に機能します。ただし、別のpythonスクリプトがあり、このスクリプトのバッチバージョンをさまざまなコマンドライン引数で実行します。次のように使用しています。
import program1
arguments = ['arg1', 'arg2', 'arg3']
program1.main(arguments)
引数を解析できるようにしたいのですが、argparseはデフォルトで、指定した引数の代わりにsys.argvを使用します。 sys.argvを使用する代わりに引数リストを渡す方法はありますか?
文字列のリストをparse_args
に渡すことができます。
parser.parse_args(['--foo', 'FOO'])
スクリプトをデフォルトのsys.argv[1:]
に変更し、最初の引数(呼び出されたコマンドの名前)を省略して引数を解析します
import argparse,sys
def main(argv=sys.argv[1:]):
parser = argparse.ArgumentParser()
# Do some argument parsing
args = parser.parse_args(argv)
if __name__ == '__main__':
main()
または、最初の引数を省略できない場合:
import argparse,sys
def main(args=None):
# if None passed, uses sys.argv[1:], else use custom args
parser = argparse.ArgumentParser()
parser.add_argument("--level", type=int)
args = parser.parse_args(args)
# Do some argument parsing
if __name__ == '__main__':
main()
最後の1つ:呼び出されたプログラムを変更できない場合でも、何かを行うことができます
変更できないプログラムがargtest.py
であるとしましょう(引数を表示するための呼び出しを追加しました)
次に、argtest.sys
モジュールのローカルargv
値を変更します。
import argtest
argtest.sys.argv=["dummy","foo","bar"]
argtest.main()
出力:
['dummy', 'foo', 'bar']