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 つで上記の警告が出力されますが、そのコマンドはシステムの日付を取得しているだけなので、なぜそのようにランダムになるのでしょうか?

ちなみに、-promptモードで実行されているmayaから上記のコードを実行しています。

乾杯

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 に答える