追踪某个进程创建的文件

0 投票
1 回答
789 浏览
提问于 2025-04-18 18:35

我正在用一个Python(3.3)脚本来运行一个命令,这个命令会生成一大堆图像文件,用于动画电影的制作。

在生成图像的过程中,每当开始渲染一个新的动画帧时,它会先创建一个空的图像文件;等到这个帧渲染完成后,它会把图像保存到那个空文件里,然后继续下一个帧。

这个Python脚本是通过运行另一个脚本来启动这个渲染过程的,使用的是:

proc = subprocess.Popen(cmd, shell=True)

我想知道有没有办法检查在这个过程中创建了哪些文件?

原因是,有人可能想在渲染完成之前停止它,但如果这样做,就会留下一个空的图像文件。我希望在按下大红色的停止渲染按钮时,脚本能自动删除这些空图像,但我不能简单地删除所有空图像,因为可能还有其他电脑在渲染——这些空图像是为了防止多台电脑渲染同一个帧(如果这个帧的图像文件已经存在,它们会跳过这个帧)。

如果有帮助的话,所有的电脑都在使用Windows 7,而进行渲染的动画程序是Maya(2014)。

如果没有简单的方法,我也乐意使用任何丑陋的解决方案来完成这个任务 :)

1 个回答

1

如果你在使用Maya,可以用Maya自带的mayapy解释器,而不是mayaBatch或maya -r。在这个独立的环境里,你可以运行任何需要的脚本来设置渲染,执行它,然后处理结果。至少,这样你可以一次处理一帧,并用Python逐个提交图片。

一个基本的设置步骤如下:

  1. 创建一个Python脚本,完成你需要的操作,并确保它在Maya的Python解释器中能正常工作。这个脚本会像在Maya的监听器中运行一样,所以你可以导入maya.cmds,根据需要使用Maya的功能。

  2. 如果脚本需要命令行参数,可以用sys.argv来获取。当你运行脚本时,传入的任何参数都会在sys.argv中可用。

  3. 你的脚本可以通过导入maya.standalone并调用它的初始化方法来访问Maya的所有功能(更多细节可以在这里找到)。

  4. 在命令行中,运行位于Maya安装目录bin文件夹下的mayapy.exe。使用-s参数可以指定要运行的脚本,所以你需要把Python脚本作为参数传入,后面跟上其他需要的参数:类似于"path/to/mayapy.exe" -s "path/to/yourscript.py" arg1 arg2 arg3

  5. 你无法通过控制+C来捕捉用户取消操作,但可以通过TCP连接到Maya命令端口请求取消,或者在每帧后提示用户输入。

如果想要更复杂的操作,可以在Maya内部运行一个RPC服务器,使用像ZeroMQRpyC这样的工具。你也可以自己做一个,使用监听HTTP端口的WSGI服务器

你还可以看看第三方的渲染管理系统。有一些开源的系统可以在这里找到。

撰写回答