【发布时间】:2009-12-14 12:04:09
【问题描述】:
我有一个跨平台的 Perl 程序,它在 win 上启动一个 win32 windows 程序,在 mac 上启动一个 macosx 应用程序。
我用system(),在mac上把被调用程序的stdout写在Perl程序的stdout里,这就是我想要的。
在 Windows 上,似乎没有办法让标准输出成为 Windows 程序。因此,作为替代方案,我让程序写入日志文件,我希望 Perl 从日志文件中读取(因为它正在被写入,被调用的程序可以运行一个小时),并将其重定向回Perl的stdout,这样在Win和Mac上的体验是一样的。
有人知道如何在 Perl 中实际执行此操作吗?我在想:
- fork 进程
- File::Tail 日志文件,在数据进入时写入标准输出
- 以某种方式确定程序何时真正完成运行。
我大概能弄清楚 #1 和 #2,但还不知道如何解决 #3。
【问题讨论】:
-
根据我的经验,Windows 程序的行为应该符合您的期望:它的 STDOUT 应该去 Perl 脚本的 STDOUT 去的地方(除非 STDOUT 是绑定的文件句柄)
-
确保您没有尝试使用
wperl.exe运行它,否则它将无法工作。