这似乎是一件容易的事情,但要求在命令中添加“ - ”,以告诉程序将参数传递给脚本(而不是处理它们)。例如:通过brenda-web界面将参数传递给python搅拌器脚本,我如何解析参数?
$ 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', '型', 'A0', '-samples', '100', '-size',“1024 ']
我该怎么办?我认为这是错误的方向,因为我想按照Option:Argument进行分组。 我想这个代码还,但它在参数的实际字母分成部分:
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)
[This answer](https://blender.stackexchange.com/a/8405/935)应该涵盖你想要的。请注意,它有一个链接到搅拌机附带的模板。 – sambler
感谢您的链接。我认为这就是我最初开始的地方,但它并不提供以“key:value”作为参数访问参数的解决方案。它更多的是在空间分裂,并索引它。我想用一些可以保持关系完好的东西。 – Mattehicks
注意'argv = argv [argv.index(“ - ”)+ 1:]'这行'从'sys.argv'复制了你想要的参数。然后你可以在['parser.parse_args(argv)'](https://docs.python.org/3/library/argparse.html#parsing-arguments)中使用它来获得键值对。 – sambler