动态重定向在Windows
问题描述:
孩子的标准输出
我注意到有关处理这几个其他的问题,但似乎都患:动态重定向在Windows
- 不工作在Windows
- 要求孩子之前完成检索输出
我想要做的是调用一个程序(例如tshark.exe)并在运行时处理它的输出。
到目前为止我曾尝试:
- 反引号
- RUN3
- PROC ::可靠
都没有成功。我可以花一整天的时间尝试,并且找不到一个能帮助我完成这个任务的模块(即我花了一整天的时间),但我认为如果我问是否有人知道这个模块可能会更好。
答
你不需要一个模块。只需了解open
命令的管道形式 - 这些在Windows上工作得很好。
my $pid = open (my $cmd_handle, "tshark.exe @options |");
# on success, $pid holds process identifier of the external command.
while (<$cmd_handle>) {
# sets $_ to next line of output.
# Will block until a line of output is ready.
# Is undef when the command is complete.
... process $_ ...
}
close $cmd_handle; # waits for command to complete if it hasn't completed yet
答
结帐IPC::Run
。 IPC::Open2
和IPC::Open3
也可能会满足您的需求。
祝你好运!
确保目标程序正确地刷新其标准输出(并且实际上是将东西发送到标准输出)。可能有一些神奇的咒语来控制外面的缓冲,我不知道它可能是什么。如果tshark.exe做了一些有趣的事情,可能会感到困惑,并决定没有连接标准输出等。通过cmd.exe/k运行有什么影响? – 2010-09-07 22:47:33
因为我没有编写目标程序,所以我没有很多控制权。我可以确认它正在写入STDOUT,并且在从cmd.exe运行时正在显示。我想在某些时候必须刷新输出,但我无法使用任何这些方法来显示它。 – tzenes 2010-09-07 22:49:46