やりたいこと
コマンドラインから blender をバックグラウンドで起動して、blender の処理を python で実行する。
python を動かすときに、いくつかの引数を持たせたい。
引数の整理をしやすいように python の argparse ライブラリを使う。
エラー
run.bat のように引数をとって実行する。
run.bat
blender.exe --background --python generate.py --gender f --location i
と、エラーが出力される。
'--' が引数のリストにないとのこと。
File "C:\hogehoge\generateData\generate.py", line 23, in
<module>
args = parser.parse_args(sys.argv[sys.argv.index('--') + 1:])
ValueError: '--' is not in list
unknown argument, loading as file: --gender
Error: Cannot read file 'C:\hogehoge\generateData\--gender': No such file or directory
解決方法
blender で python script に引数を持たせる場合の作法があるようで、引数の前に '--' をつける。
run.bat
blender.exe --background --python generate.py -- --gender f --location i
そうすると、引数は sys.argv で保持する。
sys.argv から argparse で引数を取り出すまでの python コードは以下のようになる。
main()
import sys
import argparse
if '__main__' == __name__:
parser = argparse.ArgumentParser()
parser.add_argument('--gender', type=str, choices=['f', 'm'], required=True,
help='gender: f->female, m->male')
parser.add_argument('--location', type=str, choices=['i', 'o'], required=True,
help='location: i->inside, o->outside')
args = parser.parse_args(sys.argv[sys.argv.index('--') + 1:])
gender = args.gender
location = args.location
所感
argparse を使って引数を取り出すところの sys.argv[sys.argv.index('--') + 1:] はおまじない感がある。