Maya – 为什么在清除历史命令后无法执行 Print 方法?

Maya – Why Print method can't be executed after Clear History command?

cmds.scriptEditorInfo(clearHistory=True)
print("hi")

第一行清除了 Maya 脚本输出 window,然后下面的行应该打印 hi。但是当你 运行 这个时,它会闪烁 hi 输出,然后清除所有内容。所以 cmds.scriptEditorInfo(clearHistory=True) 最后执行。有人可以向我解释一下并帮助我了解如何清理输出 Window 然后打印 hi.

我从这里得到了明确的功能:

看来是个bug。

我尝试了三种方法,结果发现如果您同时执行这两行,这三种方法都不起作用。 但是如果每一行都单独执行肯定可以:首先是scriptEditorInfo()方法,其次是print()方法。

你的方法:

import maya.cmds as mc

mc.scriptEditorInfo(clearHistory=True)
print("Hello")

第二种方法(pymel):

import pymel.core as pc

pc.scriptEditorInfo(clearHistory=True)
print("Hello")

第三种方法 (MEL):

scriptEditorInfo -clearHistory ;
print "Hello" ;

我也可以确认它清除了历史记录并且不打印,即使我循环打印100次。

有一种方法可以使用 evalDeferred 使其不会立即执行:

import maya.cmds as cmds

cmds.scriptEditorInfo(clearHistory=True)
cmds.evalDeferred("print 'Hello world!'")

或者如果你想 运行 清除命令后的大量代码:

import maya.cmds as cmds

def run_code():
    # Run any code here
    print('Hello!')

cmds.scriptEditorInfo(clearHistory=True)
cmds.evalDeferred("run_code()")

现在历史清除了,我们看到了预期的打印命令。

您可以使用:

import maya.cmds
reporter = mel.eval( 'string $tmp = $gCommandReporter;' )
cmds.cmdScrollFieldReporter(reporter, e=True, clear=True)

cmdScrollFieldReporter 命令需要定义报告器。