追踪某个进程创建的文件
我正在用一个Python(3.3)脚本来运行一个命令,这个命令会生成一大堆图像文件,用于动画电影的制作。
在生成图像的过程中,每当开始渲染一个新的动画帧时,它会先创建一个空的图像文件;等到这个帧渲染完成后,它会把图像保存到那个空文件里,然后继续下一个帧。
这个Python脚本是通过运行另一个脚本来启动这个渲染过程的,使用的是:
proc = subprocess.Popen(cmd, shell=True)
我想知道有没有办法检查在这个过程中创建了哪些文件?
原因是,有人可能想在渲染完成之前停止它,但如果这样做,就会留下一个空的图像文件。我希望在按下大红色的停止渲染按钮时,脚本能自动删除这些空图像,但我不能简单地删除所有空图像,因为可能还有其他电脑在渲染——这些空图像是为了防止多台电脑渲染同一个帧(如果这个帧的图像文件已经存在,它们会跳过这个帧)。
如果有帮助的话,所有的电脑都在使用Windows 7,而进行渲染的动画程序是Maya(2014)。
如果没有简单的方法,我也乐意使用任何丑陋的解决方案来完成这个任务 :)
1 个回答
如果你在使用Maya,可以用Maya自带的mayapy解释器,而不是mayaBatch或maya -r。在这个独立的环境里,你可以运行任何需要的脚本来设置渲染,执行它,然后处理结果。至少,这样你可以一次处理一帧,并用Python逐个提交图片。
一个基本的设置步骤如下:
创建一个Python脚本,完成你需要的操作,并确保它在Maya的Python解释器中能正常工作。这个脚本会像在Maya的监听器中运行一样,所以你可以导入
maya.cmds
,根据需要使用Maya的功能。如果脚本需要命令行参数,可以用sys.argv来获取。当你运行脚本时,传入的任何参数都会在sys.argv中可用。
你的脚本可以通过导入
maya.standalone
并调用它的初始化方法来访问Maya的所有功能(更多细节可以在这里找到)。在命令行中,运行位于Maya安装目录bin文件夹下的mayapy.exe。使用-s参数可以指定要运行的脚本,所以你需要把Python脚本作为参数传入,后面跟上其他需要的参数:类似于
"path/to/mayapy.exe" -s "path/to/yourscript.py" arg1 arg2 arg3
。- 你无法通过控制+C来捕捉用户取消操作,但可以通过TCP连接到Maya命令端口请求取消,或者在每帧后提示用户输入。
如果想要更复杂的操作,可以在Maya内部运行一个RPC服务器,使用像ZeroMQ或RpyC这样的工具。你也可以自己做一个,使用监听HTTP端口的WSGI服务器。
你还可以看看第三方的渲染管理系统。有一些开源的系统可以在这里找到。