Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过brenda web界面将参数传递给python blender脚本,如何解析这些参数?_Python_Blender - Fatal编程技术网

通过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'}}