【发布时间】:2013-01-17 13:23:56
【问题描述】:
Autodesk Maya 2012 提供了“mayapy”——一个修改过的 python 构建,其中包含加载 Maya 文件所需的包,并充当批处理工作的无头 3D 编辑器。我从 bash 脚本中调用它。如果该脚本在其中打开带有cmds.file(filepath, open=True) 的场景文件,它会喷出一页页的警告、错误和其他我不想要的信息。我想在 cmds.file 命令运行时关闭所有这些。only。
我尝试从我发送的 Python 命令内部重定向到 shell 脚本中的 mayapy,但这不起作用。我可以通过在对 bash 脚本的调用中将 stdout/err 重定向到 /dev/null 来使所有内容静音。有什么方法可以在调用 shell 时使其静音,但仍然允许我在脚本中传入的命令打印出信息?
test.sh:
#!/bin/bash
/usr/autodesk/maya/bin/mayapy -c "
cmds.file('filepath', open=True);
print 'hello'
"
调用它:
$ ./test.sh # spews info, then prints 'hello'
$ ./test.sh > /dev/null 2>&1 # completely silent
【问题讨论】:
-
我看到您尝试将 sys.stdout/err 指向死写方法,但您是否也尝试将 sys.__stdout__ 和 sys.__stderr__ 指向死写方法?它们通常指向 stdout 和 stderr 的原始值,也许 mayapy 将这些值用于打印方法而不是典型的方法?
-
我只是试了一下,但它仍然会打印出所有额外的信息。
-
作为健全性检查:我正在做
sys.stdout = open('/dev/null','w'),stderr 也是如此,你的两个值带有下划线。 -
我是否正确地假设 mayapy 正在生成这些消息并将它们传播到调用 bash 脚本,而这实际上是打印出来的?看起来是这样,因为我可以在 bash 级别停止它。
-
他们当然有可能向上传播消息,但更有可能的是他们将消息一起打印到其他地方而不是传播到 python 层。您打算记录多少属于您的内容,因为我正在考虑一种可行的解决方法。