標準出力・標準エラー出力するには (puts / fputs / println)

端末から普通にプログラムを起動したときにプログラムから端末に出力させるには、標準出力や標準エラー出力とよばれるものに文字列を出力すればよい。そんな出力をするための puts とか print とか echo みたいな名前の関数のある言語が多い。

実際には、標準出力はファイルディスクリプタ1で、標準エラー出力はファイルディスクリプタ2で、プログラムを起動した時から書き込み用に開いているファイルとみなせるもので、ファイルにデータを書き出す関数をそのまま使えることも多い。

以下は、標準出力・標準エラー出力に出力する方法。

C言語

#include <stdio.h>

/* 標準出力 */
puts("OK");

/* 標準エラー出力 */
fputs("Error\n", stderr);

puts は最後に改行してくれるのに fputs はなぜしてくれないんだろう?

Go言語 (golang)

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

// 標準出力
System.out.println("OK");

// 標準エラー出力
System.err.println("Error");

Groovy

// 標準出力
println "OK"

// 標準エラー出力
System.err.println "Error"

PHP

// 標準出力
echo "OK\n";

// 標準エラー出力
fputs(STDERR, "Error\n");

Python

Python2での例

print "OK"  # 最後に改行される
print "OK", # 最後に改行されないが、最後に空白が出力されてしまう

Python2では print は予約語であり、関数ではなく文の扱いだったので、括弧を使わずにこのような書き方が可能であるが、 Python3では関数になっている。

Python3での例

print("OK")  # 最後に改行される

最後に改行や空白が出力されてしまうのを抑制するには sys.stdout.write を使うしかない。

Python2/Python3での例

import sys

sys.stdout.write("OK\n")

Ruby

# 標準出力
print "OK\n"
puts "OK"
STDOUT.print "OK\n"
STDOUT.puts "OK"

# 標準エラー出力
STDERR.print "Error\n"
STDERR.puts "Error"

puts は最後に自動で改行される。

Perl

# 標準出力
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

# 標準出力
echo "OK"

# 標準エラー出力
echo "Error" >&2

JavaScript / CoffeeScript

# 標準出力
console.log("OK");
このサイトは筆者(hydrocul)の個人メモの集合です。すべてのページは永遠に未完成です。