これを使用して、出力をstdoutに送信します。
println!("some output")
Stderrに対して同じことを行う対応するマクロはないと思います。
Rust 1.19では、 eprint
および eprintln
マクロを使用できます。
_fn main() {
eprintln!("This is going to standard error!, {}", "awesome");
}
_
これは元々 RFC 1896 で提案されました。
実装の_println!
_ を見て、どのように機能するかを詳しく見てみましょうが、最初に読んだときは少し圧倒されました。
ただし、同様のマクロを使用して、stderrにフォーマットできます。
_use std::io::Write;
let name = "world";
writeln!(&mut std::io::stderr(), "Hello {}!", name);
_
ただし、IO)は失敗する可能性があるため、これは_unused result which must be used
_警告を表示しますこの場合、既存のメソッド 単にパニック を確認できるため、同じようにコードを更新できます。
_use std::io::Write;
let name = "world";
let r = writeln!(&mut std::io::stderr(), "Hello {}!", name);
r.expect("failed printing to stderr");
_
これは少し多いので、マクロでラップしてみましょう。
_use std::io::Write;
macro_rules! println_stderr(
($($arg:tt)*) => { {
let r = writeln!(&mut ::std::io::stderr(), $($arg)*);
r.expect("failed printing to stderr");
} }
);
fn main() {
let name = "world";
println_stderr!("Hello {}!", name)
}
_
それはそうです:
use std::io::Write;
fn main() {
std::io::stderr().write(b"some output\n");
}
プログラムの出力を/dev/null
に送信してテストして、機能することを確認できます(警告は無視します)。
$ rustc foo.rs && ./foo > /dev/null
foo.rs:4:5: 4:42 warning: unused result which must be used, #[warn(unused_must_use)] on by default
foo.rs:4 io::stderr().write(b"some output\n");
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
some output
同様に、stdoutに対して以下を行うことができます。
use std::io::Write;
fn main() {
std::io::stdout().write(b"some output\n");
}
これはprintln!
が単に便利であることを意味すると思います:それはより短く、またいくつかのフォーマットを許可します。後者の例として、以下は0x400
を表示します:
println!("0x{:x}", 1024u)
正確な質問に答えているわけではありませんが、他のクレートのレベルロギングのインターフェースを指定するlog
クレートがあることは興味深いかもしれません(例:env_logger
)を満たすことができます。
そのようなロギングの出力はstderr
に送信され、ログレベルを指定するなど、ユーザーにとって追加の利点があります。
これは、そのようなロガーの使用方法の例です。
#[macro_use]
extern crate log;
extern crate env_logger;
fn main() {
env_logger::init().unwrap();
error!("this is printed by default");
}
( http://burntsushi.net/rustdoc/env_logger/index.html#example からの例)
stderr!("Code {}: Danger, Will Robinson! Danger!", 42);
他の回答では、最新の夜間に未使用のインポート警告が生成されるため、Just Works TMという最新のマクロがあります。
macro_rules! stderr {
($($arg:tt)*) => (
use std::io::Write;
match writeln!(&mut ::std::io::stderr(), $($arg)* ) {
Ok(_) => {},
Err(x) => panic!("Unable to write to stderr (file handle closed?): {}", x),
}
)
}