【发布时间】:2011-12-20 20:14:50
【问题描述】:
我只是在学习 groovy。我有一个非常简单的脚本,可以使用println 向 STDERR 和 STDOUT 输出一些文本:
err = System.err
resultStr = "test to print"
err.println resultStr
println resultStr
如果我在没有重定向的情况下运行脚本,我会在输出中两次获得resultStr 字符串。
如果我将输出重定向到带有test > test.txt 的文件,则结果字符串会在输出中出现一次(OK),创建test.txt(OK),但它是空。我尝试使用 System.out.println 而不是 println 来获得相同的结果。我做错了什么?
如果它很重要,我使用的是 Windows 7。以防万一我尝试重定向标准 Windows 程序的输出,如 dir,它可以工作。
Groovy 版本:1.8.4 JVM:1.7.0_02
更新:我还尝试在 java(相同的 JVM)中创建一个简单的 "Hello World" 类。重定向确实有效。所以它应该是 Groovy 中的东西。
UPDATE 2:@socha23 评论说他可以在 Windows 7 下从同一个脚本成功重定向后,我认为问题不在脚本上,而是在 Groovy 安装、版本冲突或操作系统。所以我问了similar question on SuperUser(很抱歉交叉发布,但我真的认为这是一个边缘问题)。
然后我发现如果我直接以test.groovy > test.txt 运行脚本,重定向将无法正常工作。但如果我运行groovy test.groovy > test.txt,它就可以工作。我仍然想了解这种行为并尽可能纠正。请访问 SU 问题。至于今天 12/24,仍然没有答案。
我认为现在很清楚这不是编程问题。请建议我是否应该从这里删除它。这两个问题是相互引用的。
【问题讨论】:
-
如果在退出前刷新流,文件是否为空?
-
@RogerLindsjö:我把
System.out.flush()放在了脚本的最后,但是文件还是空的。 -
它在带有 Groovy 1.8.3 的 Mac OS X 上运行良好。我怀疑这是 Windows 7 的问题(尽管这令人惊讶)。
-
好吧,我明天会尝试重新启动,看看会发生什么。有人可以在 Windows 机器上尝试此代码吗?我正在使用最新的 Groovy 版本。
-
我刚刚在我的 Windows7 机器上试了一下,效果很好。
标签: java redirect groovy stdout