標準出力・標準エラー出力するには (puts / fputs / println) 2016/01/20
端末から普通にプログラムを起動したときにプログラムから端末に出力させるには、標準出力や標準エラー出力とよばれるものに文字列を出力すればよい。そんな出力をするための puts
とか print
とか echo
みたいな名前の関数のある言語が多い。
実際には、標準出力はファイルディスクリプタ1で、標準エラー出力はファイルディスクリプタ2で、プログラムを起動した時から書き込み用に開いているファイルとみなせるもので、ファイルにデータを書き出す関数をそのまま使えることも多い。
以下は、標準出力・標準エラー出力に出力する方法。
C言語 2014/06/24
#include <stdio.h>
/* 標準出力 */
puts("OK");
/* 標準エラー出力 */
fputs("Error\n", stderr);
puts
は最後に改行してくれるのに fputs
はなぜしてくれないんだろう?
Go言語 (golang) 2015/08/04
package main
import "os"
func main() {
// 標準出力
os.Stdout.Write([]byte("OK\n"))
// 標準エラー出力
os.Stderr.Write([]byte("Error\n"))
}
fmt.Print
を使ったほうが、いちいちstring
を[]byte
にキャストしなくていいので楽かも。
package main
import "os"
import "fmt"
func main() {
// 標準出力
fmt.Print("OK\n")
// 標準エラー出力
fmt.Fprint(os.Stderr, "Error\n")
}
fmt.Println
だと最後に改行される。
Java 2014/05/05
// 標準出力
System.out.println("OK");
// 標準エラー出力
System.err.println("Error");
Groovy 2014/10/24
// 標準出力
println "OK"
// 標準エラー出力
System.err.println "Error"
PHP 2014/05/12
// 標準出力
echo "OK\n";
// 標準エラー出力
fputs(STDERR, "Error\n");
Python 2014/11/08
Python2での例
print "OK" # 最後に改行される
print "OK", # 最後に改行されないが、最後に空白が出力されてしまう
Python2では print
は予約語であり、関数ではなく文の扱いだったので、括弧を使わずにこのような書き方が可能であるが、
Python3では関数になっている。
Python3での例
print("OK") # 最後に改行される
最後に改行や空白が出力されてしまうのを抑制するには sys.stdout.write
を使うしかない。
Python2/Python3での例
import sys
sys.stdout.write("OK\n")
Ruby 2014/01/19
# 標準出力
print "OK\n"
puts "OK"
STDOUT.print "OK\n"
STDOUT.puts "OK"
# 標準エラー出力
STDERR.print "Error\n"
STDERR.puts "Error"
puts
は最後に自動で改行される。
Perl 2014/01/15
# 標準出力
print "OK\n";
print STDOUT "OK\n";
# 標準エラー出力
print STDERR "Error\n";
warn "Error\n";
STDOUT
, STDERR
はファイルハンドル。ちなみに標準入力のファイルハンドルは STDIN
。
print
の使い方はファイルに書き込むのと同じ。-> print
warn
は標準エラー出力する。出力する文字列に改行がなかった場合は行番号を出力し、その点は die
に似ている。
warn | perldoc.jp
http://perldoc.jp/func/warn
sh 2014/09/26
# 標準出力
echo "OK"
# 標準エラー出力
echo "Error" >&2
JavaScript / CoffeeScript 2013/09/18
# 標準出力
console.log("OK");