通过brenda web界面将参数传递给python blender脚本,如何解析这些参数?
这似乎是一项简单的任务,但需要在命令中添加“-”,告诉程序将参数传递给脚本(而不是处理它们)。例如:通过brenda web界面将参数传递给python blender脚本,如何解析这些参数?,python,blender,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 Val
$ 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))
但我一直坚持“搅拌机:错误:无法识别的参数:”
编辑-----------------------------
编辑------------------------
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',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)
试试看:
#getopt.getopt(sys.argv[1:,'x:y:')
#opts,val=getopt.getopt(参数,“hi:o:”,[“objindex=“]))
opts,args=getopt.getopt(参数“h:o”)
除getopt.GetoptError外:
logging.info('prototype.py--items')
系统出口(2)
logging.info(“参数:”)
logging.info(参数)
logging.info(“opts”)
logging.info(opts)
退出()
对于opt,选项中的val:
#打印(“选项”+opt)
如果选择加入(“--items”,“--items”):
objindex=val
elif选择加入(“--type”,“--type”):
logging.info(“找到的渲染类型:”+val)
您可以使用迭代器创建自己的解析器。此代码将把参数分为两个dict(在--
之前和之后):
输出:
{'part1': {'b': 'testscene.blend', 'python': 'localrender.py'},
'part2': {'samples': '100', 'start': '1', 'type': 'diffuse'}}
不过,我不太确定您想对这些参数做什么,如果您需要更多帮助,请澄清您的问题。@MattH您在编辑中说您试图将它们分组为option:argument,但我的答案就是这样的:键是一个选项(前面没有“-”或“--”),值就是参数。这不是您正在搜索的吗?
args=sys.argv iter=(args中的i代表i)
谢谢!成功了!如何使用在第2部分{}中获得的值?更新:已解决。谢谢你的帮助,我显然是python新手。为了回答我自己的问题,我刚刚给一个新的dict分配了part2{}:dict=args_dict['part2']
@MattH Great!我很高兴你自己找到了它,在询问之前,别忘了用谷歌搜索一段时间;)应该包括你想要的。请注意,它有一个指向blender附带的模板的链接。谢谢链接。我想这就是我最初开始的地方,但是它没有提供一个解决方案来访问作为“key:value”对的参数。它更多的是在空格处进行拆分,并将其全部索引。我想使用一些可以保持关系完整的东西。请注意,行argv=argv[argv.index(“--”)+1:
复制了您想要从sys.argv
复制的args。然后,您可以在中使用它来获取键、值对。
{'part1': {'b': 'testscene.blend', 'python': 'localrender.py'},
'part2': {'samples': '100', 'start': '1', 'type': 'diffuse'}}