我正在使用从Nuke捕获的Python代码,Nuke是一个合成软件,它添加了行延续和转义字符。用户在Nuke输入的代码如下:
if nuke.frame()>1:
ret=nuke.frame()/2
else:
ret=nuke.frame()
要检索此代码(存储在Nuke中的节点旋钮中),我使用Nuke的Python API中的expression()方法,下面是一个示例:
animation_curve = n['multiply'].animation(0)
code_string = animation_curve.expression()
生成的代码字符串如下所示:
[python -execlocal if\ nuke.frame()>1:\n\ \ \ ret=nuke.frame()/2\nelse:\n\ \ \ ret=nuke.frame()]
然后通过regex模式匹配,我只捕获代码:
if\ nuke.frame()>1:\n\ \ \ ret=nuke.frame()/2\nelse:\n\ \ \ ret=nuke.frame()
我的目标是使用Python中的ast模块解析和执行这个代码字符串,同时考虑到行的延续和转义字符。但是,由于行连续字符后面的意外字符引起的语法错误,我遇到了一些困难。当我尝试tree = ast.parse(code_string)
时,我得到:
if\ nuke.frame()>1:\n\ \ \ ret=nuke.frame()/2\nelse:\n\ \ \ ret=nuke.frame()
^
SyntaxError: unexpected character after line continuation character
请注意,我可能无法使用.replace()来消除代码中的反斜杠,因为某些代码中实际上可能有反斜杠。由于安全风险,我也不能使用exec()。
我很感激任何见解、建议或代码示例,它们可以指导我正确地解析和执行从Nuke的动画表达式中获得的Python代码。感谢您的宝贵帮助!
1条答案
按热度按时间klh5stk11#
这里的诀窍是,你有空格用反斜杠
"\ "
转义,而ast
包不喜欢它们。我相信我们可以手动把它们剥离出来,事情应该会有希望。尝试: