簡體   English   中英

在Perl中重定向管道的STDOUT

[英]Redirecting STDOUT of a pipe in Perl

我覺得似乎應該有一個簡單的方法來做到這一點,但是四處搜尋並沒有給我帶來好的線索。 我只想open()到應用程序的管道,向其中寫入一些數據,然后將子進程的輸出發送到調用腳本的STDOUT

open(my $foo, '|-', '/path/to/foo');
print $foo 'input'; # Should behave equivalently to "print 'output'"
close($foo);

有沒有簡單的方法可以做到這一點,或者我遇到了Perl眾多“無法從這里到達那里”的時刻之一?

子進程將自動繼承STDOUT。 這對我有用:

open(my $f, "|-", "cat");
print $f "hi\n";

如果不是真的立即關閉管道,則問題可能出在另一端:默認情況下,STDOUT是行緩沖的,因此您會立即看到print "hello world\\n" 默認情況下,子進程的管道將使用塊緩沖,因此您實際上可能正在等待perl腳本中的數據到達其他程序:

open(my $f, "|-", "cat");
print $f "hi\n";
sleep(10);
close($f); # or exit
# now output appears

嘗試添加select $f; $| = 1 select $f; $| = 1 select $f; $| = 1 (或者我認為更現代的方法是$f->autoflush(1)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM