通过brenda-web界面将参数传递给python blender脚本,如何解析参数?

时间:2017-06-24 05:24:53

标签: python blender

这似乎是一项简单的任务,但有一项要求是" - "被添加到命令中,告诉程序将参数传递给脚本(而不是处理它们)。例如:

  $ blender -b testscene.blend --python localrender.py -- -start 1 -type diffuse -samples 100

我找到了一种通过使用它来分离脚本参数的方法:

try:
    args = list(reversed(sys.argv))
    idx = args.index("--")
except ValueError:
    params = []
else:
    params = args[:idx][::-1]
    print("Script params:", params)

单独打破它们。这不是我认为需要发生的事情。我也试过argparse,但我认为" - "打破它。有人知道解决这些问题的复杂方法吗?我想将arg +值保持在一起,这样我就可以做到这样的事情:

args = parser.parse_args()
if args.index:
    logging.info("index set to: " + str(args.index))

但我坚持使用" blender:错误:无法识别的论点:"

EDIT ----------------------------- EDIT ------------------------

I am currently using this to grab the args after "--"
try:
    args = list(reversed(sys.argv))
    idx = args.index("--")
except ValueError:
    params = []
else:
    params = args[:idx][::-1]
    #print("Script params:", params)

logging.info(params)

创建此结构: [' -items',' 1',' -type',' AO',' -samples',& #39; 100',' -size',' 1024']

我该怎么办?我认为这是朝着错误的方向发展,因为我希望按选项进行分组:参数。 我也尝试了这个代码,但它将参数中的实际字母分成几部分:

try:
    #getopt.getopt(sys.argv[1:], 'x:y:')
    #opts,val = getopt.getopt(params,"hi:o:",["objindex="])
    opts, args = getopt.getopt(params, "h:o")
except getopt.GetoptError:
    logging.info('prototype.py --items <items>')
    sys.exit(2)

logging.info("params:")
logging.info(params)
logging.info("opts")
logging.info(opts)

exit()

for opt, val in opts:
 # print("option" + opt)
  if opt in ("--items", "-items"):
    objindex = val
  elif opt in ("--type", "-type"):
    logging.info("found render type: " + val)

1 个答案:

答案 0 :(得分:0)

您可以使用迭代器创建自己的解析器。此代码将您的参数分成两个序列(--之前和之后):

args = '-b testscene.blend --python localrender.py -- -start 1 -type diffuse -samples 100'
iter = (i for i in args.split(' '))

args_dict = {'part1': {}, 'part2': {}}
current_part = 'part1'
for chunk in iter:
    if chunk == '--':
        current_part = 'part2'
        continue
    if chunk.startswith('-'):
        args_dict[current_part][chunk.lstrip('-')] = next(iter)

print(args_dict)

输出:

{'part1': {'b': 'testscene.blend', 'python': 'localrender.py'},
 'part2': {'samples': '100', 'start': '1', 'type': 'diffuse'}}

我不确定你在尝试用这些论点做些什么,如果你想要更多的帮助,请澄清你的问题。