外部コマンドを実行してその出力をそのまま出力するには
Scala 2014/10/08
import scala.sys.process._;
val ret = "pwd"!;
# pwdコマンドの標準出力はそのまま標準出力される
# ret: Int = 0
PHP 2013/11/06
例
system('ls -al');
外部コマンドでの出力はそのまま出力される。出力の最後の行は返り値でも取得できる。
fork, exec, wait を使う例
$pid = pcntl_fork();
if ($pid > 0) {
// 親プロセスの場合
pcntl_wait($status);
// pcntl_waitは子プロセスのうちどれか1つが終了するまで待ち、
// 終了ステータスを $status に保存する
echo $status;
} else if ($pid == 0) {
pcntl_exec("/bin/sleep", array("1"));
die("exec失敗");
} else {
die("fork失敗");
}
pcntl_fork
や pcntl_exec
などの呼び出し時に
PHP Warning: pcntl_fork() has been disabled for security reasons
などと表示されてしまう場合は、php.ini
に disable_functions
の設定がされているので、それをコメントアウトするか、必要な関数を disable_functions
から削除する。
Python 2015/03/08
例
import os
os.system('ls -al');
外部コマンドでの標準出力・標準エラー出力はそのまま標準出力・標準エラー出力される。出力の最後の行は返り値でも取得できる。
コマンドが0
を返した場合には、自分の環境で試した限りはos.system
の返り値が0
になるみたいだけど、厳密にはos.system
が何を返すかは実装に依存するみたい。
Perl 2013/09/06
例
system('ls -al');
この方法だと外部コマンド実行中に Ctrl+C を押しても、外部コマンドが終了するだけで、Perlスクリプトは終了してくれない。
Ctrl+C を押して外部コマンドだけでなくPerlスクリプト自体を終了させるには
fork
, exec
, wait
を使う。
my $pid = fork;
if ($pid) {
# 親プロセスの場合
wait;
# waitは子プロセスのうちどれか1つが終了するまで待つ
} elsif (defined $pid) {
# 子プロセスの場合
exec('...');
# exec呼び出すとそれ以降は実行されない
} else {
# fork失敗の場合
...;
}