7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

コマンドラインで blender から python script を起動するときの引数の渡し方

Posted at

やりたいこと

コマンドラインから 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:] はおまじない感がある。

参照

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?