WEB相談室

Webページ作成に関しての何でも掲示板です。

タイトル:CGIで外部コマンドの復帰値取得

0:[投稿] FD [MAIL] [2002/05/01 12:14 ][環境:WIN+IE UNIX系+Perl]

初めて投稿させていただきます。
CGI(perl)からUNIXのコマンド(pkgchk)をsystem関数で実行するとサーバーエラーとなってしまいます。
他のコマンド(cp, mv等)は正常に動作し、復帰値も正常に取れます。
apacheのerr_logの内容は
malformed header from script. Bad header=Checking uninstalled directory:
です。エラーログから、pkgchkコマンドの結果出力がCGIの出力とみなされているのではないかと思います。">& /dev/null"で出力をリダイレクトしてみると復帰値がコマンドの成否に関わらず255が帰ってきてしまいます。
環境はSolaris7のApache1.3.12、perl5.005_02です。

どなたかいい方法をご存知の方がいらっしゃいましたら教えていただけないでしょうか。申し訳ありませんがよろしくお願いします。


1:[回答] すな [2002/05/01 21:19 ]

システムコマンドを使う時はバッファフラッシュしないと、
うまく行かない場合が有ります。
スクリプトの最初の方で、 $|=1; を試してみてください。

コマンド側で、エラー出力などを勝手に標準出力に出してしまう
ものが有るのが原因と踏んでいますが、詳しくは検証していません。

またコマンドの文字列で、 pkgchk 2>&1 とすることで標準
エラー出力を補足できるのでヒントになるかも・・・


2:[回答] B-Cus [2002/05/02 00:46 ]

>>0
> 正常に動作し、復帰値も正常に取れます。

ほんとに正しい復帰値を取れてます? ちゃんと 256 で割ってますか?

もし system の戻り値が 255 ならば、signal 127 で core dump したという
ことですが、多分 Solaris 7 には signal 127 なんてないでしょうから
これは違うんでしょう。


3:[回答] B-Cus [2002/05/02 01:09 ]

じゃなくて
 >& /dev/null

 >/dev/null 2>1
とする、ということかも。前者は csh の書き方ですが、system が
使うのは sh なのでエラーになるはず。後者は sh の出力の捨て方。

それにしても 255 が返ってくるというのが説明できませんが。


4:[回答] FD [MAIL] [2002/05/07 11:30 ]

返答が遅くなってしまい、申し訳ありません。
すなさん、B-Cusさん、回答ありがとうございます。
コマンドの復帰値ですが、コマンドラインの編集で
pkgchk -d "パッケージ"  >/dev/null 2>&1
とすることで、正常・異常終了の復帰値をCGIから受け取ることができました。やはり、標準/エラー出力がCGIエラーの原因のようです。
systemがcshではなくshを使用しているとは知らず、お恥ずかしい限りです。しかも復帰値で帰ってきているのはエラー時は255ではなく256でした。紛らわしい間違いでご迷惑をおかけしました。すみません。本当にありがとうございました。


5:[完了] FD [MAIL] [2002/05/07 11:33 ]

…たびたびお邪魔してすみません。ステータスは「回答」ではなく「完了」です。。

回答(必須): 状態:

お名前(必須):

e-mail:

URL:




[戻る]

ChaichanPAPA's World