这似乎是一项简单的任务,但有一项要求是" - "被添加到命令中,告诉程序将参数传递给脚本(而不是处理它们)。例如:
$ 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)
答案 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'}}
我不确定你在尝试用这些论点做些什么,如果你想要更多的帮助,请澄清你的问题。