我正在尋找一個使用Perl將stdout重定向到文件的示例。我正在做一個相當簡單的fork/exec工具,我想將孩子的輸出重定向到一個文件而不是父標準輸出。如何將標準輸出重定向到Perl中的文件?
是否有一個平等的dup2()
我應該使用?我似乎無法找到它
我正在尋找一個使用Perl將stdout重定向到文件的示例。我正在做一個相當簡單的fork/exec工具,我想將孩子的輸出重定向到一個文件而不是父標準輸出。如何將標準輸出重定向到Perl中的文件?
是否有一個平等的dup2()
我應該使用?我似乎無法找到它
從的perldoc -f打開:
open STDOUT, '>', "foo.out"
該文檔是你的朋友?
孩子本身可以做select $filehandle
指定其所有print
的調用應該指向特定的文件句柄。
父母可以做的最好的事情是使用system
或exec
或其他類型的東西進行外殼重定向。
open my $fh, '>', $file;
defined(my $pid = fork) or die "fork: $!";
if (!$pid) {
open STDOUT, '>&', $fh;
# do whatever you want
...
exit;
}
waitpid $pid, 0;
print $? == 0 ? "ok\n" : "nok\n";
非常好的方法,但不幸的是,由於系統退出功能限制,不可能將任何文本反向編號。 – Znik 2014-02-26 12:32:50
一個嚴格的信息,但不實際的答案:
雖然幾乎可以肯定的要對這個取決於你想要做什麼的確切細節,如果你絕對必須有dup2()
更優雅的方式,它的Perl等價物存在於POSIX
模塊中。但是,在這種情況下,您正在處理實際的文件描述符,而不是Perl文件句柄,相應地,您僅限於使用POSIX模塊中提供的其他功能,所有這些功能都類似於您在C中使用的功能。在某種程度上,你將會在非Perlish Per Perl中編寫C語言。
由於JS劉海說,一個簡單的方法來重定向輸出是使用「選擇」的發言。
非常感謝stackoverflow和他們的用戶。我希望這是有益
例如:
print "to console\n";
open OUTPUT, '>', "foo.txt" or die "Can't create filehandle: $!";
select OUTPUT; $| = 1; # make unbuffered
print "to file\n";
print OUTPUT "also to file\n";
print STDOUT "to console\n";
# close current output file
close(OUTPUT);
# reset stdout to be the default file handle
select STDOUT;
print "to console";
不幸的是,這隻能在perl腳本內部使用。它不會重定向系統函數調用的命令的輸出。 – Znik 2014-02-26 12:34:05
從Perl中或在命令行?什麼OS? – lexu 2010-05-25 18:58:19
請看這裏:http://stackoverflow.com/questions/655719/how-do-i-unalias-from-perls-stdout – lexu 2010-05-25 18:59:51
如果是這種情況,你只是旨在重定向程序的輸出是'exec這個問題並不一定是Perl特有的,這是一個shell重定向的問題,或者當你調用它的時候,使用任何內置於程序中的設施。例如'exec(「program> out.txt」);'。 – cikkle 2010-05-25 19:55:10