1

我创建了一个终端脚本,它控制我在 20 台不同机器上的渲染,效果很好,但是随机打印出以下警告:

Warning: file: /Volumes/raid/farm_script/procedures.mel line 63: Converting string "" to an int value of 0.

它所指的第 63 行$time = system("date +%s") ;是下面函数中的这一行。

global proc int getUnixTimestamp() {
    int $time = 0;
    $time = `system("date +%s")`;
    return $time;
}

假设 30 帧中有 1 帧打印出上述警告,但是看到该命令只是获取系统日期,为什么它会像那样随机?

我正在运行上面的代码,顺便说一句,maya 在 -prompt 模式下运行。

干杯

4

1 回答 1

0

我最好的答案是这样的:

global proc int getUnixTimestamp() {
    int $time = 0;
    string $timestr = `system("date +%s")`;
    if (size($timestr)) {
        $time = $timestr;
    }
    return $time;
}

它仅在不是空字符串的情况下尝试将字符串强制$timestr转换为 int 。(空字符串是导致警告的原因。)否则它只会返回.$time$timestr0

如果您需要对值做一些重要的事情,而不仅仅是打印它以进行日志记录,那么我不寒而栗地为您提供以下替代方案:

global proc int getUnixTimestamp() {
    int $time = 0;
    string $timestr;
    for (int $i=0; $i<10; $i++) {
        $timestr = `system("date +%s")`;
        if (size($timestr)) {
            $time = $timestr;
            return $time;
        }
    }
    return $time;
}

在放弃之前,它最多运行系统调用 10 次。它可能不会连续失败 10 次,但如果失败,则返回0.

于 2014-01-21T05:23:04.733 回答