我有下面的Perl代碼,並希望它在終端顯示時完全顯示爲調用/bin/ls
。例如,在一個大小爲100列的終端上,在插入換行符之前,它最多可打印100個字符的輸出。相反,該代碼在每行輸出中打印1個文件。我覺得它包括將一些終端設置分配給IO::Pty
實例,但我嘗試過這樣的變化,但沒有運氣。如何影響Perl IPC :: Open3輸出的寬度?
更新:我更換了<$READER>
通過調用sysread
希望原代碼可能只是有一個緩衝的問題,但是從sysread
接收到的輸出仍然是每行一個文件。
更新:我添加了代碼,顯示了我通過clone_winsize_from
方法更改IO :: Pty大小的嘗試。這並沒有導致產量有任何不同。
UPDATE:作爲最好的,我可以告訴(讀取IPC :: 1.12版本open3代碼),似乎你不能通過類型的變量IO ::處理不open3
創建一個管道,而不是dup
「荷蘭國際集團的文件句柄。這意味着isatty
在ls
調用它時不返回真值,然後ls
強制自己進入「每行一個文件」模式。
我想我只需要做一個fork/exec並自己處理I/O重定向。
#!/usr/bin/env perl
use IPC::Open3;
use IO::Pty;
use strict;
my $READER = IO::Pty->new();
$READER->slave->clone_winsize_from(\*STDIN);
my $pid = open3(undef, $READER, undef, "/bin/ls");
while(my $line = <$READER>)
{
print $line;
}
waitpid($pid, 0) or die "Error waiting for pid: $!\n";
$READER->close();
謝謝。我曾嘗試過使用「本地$ READER」這樣做了幾次,但沒有成功。 – nall
'$ READER'是標量。你需要一個glob。使用'>&READER'的關鍵不是'local',而是使用glob。 – ikegami