You need to enable JavaScript to run this app. 为什么我的循环首次执行后就终止?遍历CSV调用Blender渲染仅跑第一条记录
优惠活动
大模型
产品
解决方案
定价
更多

为什么我的循环首次执行后就终止?遍历CSV调用Blender渲染仅跑第一条记录

循环提前终止的核心原因

两个问题叠加导致脚本仅完成第一次渲染就退出:

  • 循环内部误用exec命令:exec的作用是用启动的新进程完全替换当前Shell进程,不会生成独立子进程。第一次执行到Blender启动行时,原本负责驱动while循环的Shell进程就被Blender进程替代,Blender渲染结束后直接退出整个脚本,没有剩余的Shell进程继续读取CSV的后续行,循环自然中断。
  • 未隔离Blender的标准输入流:哪怕去掉exec关键字,Blender这类批处理程序默认会从当前绑定的标准输入(也就是while循环读取的blend.csv文件流)读取内容,第一次启动Blender时会把CSV中剩余的3条数据全部从stdin流中读走,等Blender执行完成回到循环时,stdin已经没有剩余内容可供read命令读取,循环同样会提前终止。

补充说明:你脚本里写的exec </Applications/Blender.app/...属于重定向位置书写错误,Bash会将这个写法等价解析为Blender命令将标准输入绑定到Blender自身的二进制文件,并非启动Blender的正确写法。

正确修复方案

修改后的脚本需要满足三个核心要求:

  • 去掉循环内部的exec关键字,让Blender作为循环的子进程运行,保证Shell进程可以在Blender执行完成后继续驱动循环。
  • 给Blender命令显式绑定空的标准输入源(通用写法为</dev/null),切断Blender对循环所持有的CSV文件流的读取,避免它吃掉后续的CSV数据。
  • 给传入Blender的参数加双引号包裹,避免取值中包含空格时被拆分为多个参数导致解析异常。

修改后的参考脚本:

#!/bin/bash

while IFS=, read -r id text
do
    echo "from csv $id $text"
    /Applications/Blender.app/Contents/MacOS/Blender -b ImageText.blend --python ImpostScript.py -- "$id" "$text" </dev/null
done <blend.csv

内容的提问来源于stack exchange,提问作者xoail

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.07 04:15:04