外部コマンドを実施し、その外部コマンドの戻り値を取得するには?

[上に] [前に] [次に]
momo 1999/08/23(月) 17:04:12
初心者です。
外部コマンドを実施し、その外部コマンドの戻り値を取得するにはどのようにすれば良いのでしょうか?
system では外部コマンドの実行だけと思うのですが・・・
教えてください。

ふじ 1999/08/23(月) 17:13:51
Perl ですよね?
#環境書いて下さいな・・・

・バッククォートを使う。
$return = `command`;

・パイプを使う。
open OUT, "command |";
@return = <OUT>;
close OUT;

愚者 1999/08/23(月) 17:23:15
使用してる言語は?
パールだと  print `xxx.cgi`;の場合
print `xxx.cgi > aaa`;としとけばxxx.cgiの結果がaaaファイルに書き込まれてます。
まちがってたらごめんなさい。
もしかして、成功か失敗かの戻り値のことだったかな?

愚者 1999/08/23(月) 17:29:02
$word = `env`;

print $word;
で、あっ ダブった。ふじさんのが詳しいですね。

B-Cus 1999/08/23(月) 18:14:39
「戻り値」というのが標準出力への実行結果という意味なら、ふじさんの
答えでOKですが、「戻り値」というのが「本当の戻り値」なら
 $ret = system("...");
や $? です。$retをシフトしたり論理和取ったりしなくちゃならんのですが、
長くなるので青ラクダ本の $? や system の項でも見て下さい。

momo 1999/08/23(月) 19:32:55
色々ありがとうございます。
現在、青ラクダは所有してないので後日購入してみます。
B-Cusさんの記述に$retをシフトしたり論理和取ったり・・・・
が理解できなかったのですが、戻り値が0か1ならシフト等は不要でしょうか?もし、よろしければ教えてください。

B-Cus 1999/08/23(月) 19:45:01
 $ret = system("perl -e 'exit(1)'");
 print "$ret\n";
 $ret = system("perl -e 'exit(0)'");
 print "$ret\n";

実行結果:
 256
 0

http://www.harukaze.net/~mishima/perl/faq/faq5j.html#5-## より

$? 最後のパイプ close、バッククォート(``) コマンド、または
  system() 演算子によって返されたステータスです。これは
  wait() システムコールによって返されるステータスであり、
  サブプロセスの exit の値 は実際は ($? >> 8) であることを
  に気をつけて下さい。そのため、多くのシステム上では、
  $? & 255 はシグナルか、死んだプロセスか、コアダンプがある
  か、のどれかを与えます。(暗記法: sh や ksh に似ている)

[上に] [前に] [次に]