2010-09-07 145 views
2

我有一个FORTRAN程序输出我想重定向到文件。我之前已经完成并使用了Bash stderr和stdout重定向失败

$myprog.out>>out.txt 2>&1 

由于某种原因,这不起作用。我用另一种简单的测试程序

$myprog.test>>out.txt 2>&1 

测试它和它的作品

我跑myprog.out和输出达到屏幕像往常一样,但重定向似乎失败​​!它正在工作,现在似乎已停止工作。这很奇怪。我评论了一些我不再需要的打印语句,重新编译,然后带重定向不起作用。

显然与我的输出有不同的东西,但如何诊断它将要发生什么?

+0

您可能需要显示程序中的一些代码,包括一些注释掉的行。它是否直接写入tty而不是stdout? – 2010-09-07 18:57:48

+0

感谢Dennis和输出行的例子是 – Tommy 2010-09-07 20:44:45

+0

print *,'||||||| runtime =',runtime,'|||||||||| – Tommy 2010-09-07 20:45:21

回答

3

您可能需要刷新输出。例如参见this SO topic。我想怎么做取决于你的编译器。因为只有Fortran 2003 Standard包含flush()语句以及确定与stdout/stderr单元对应的数字的功能。但是在gfortran中(例如),可以使用flush()内部过程和Unix文件描述符的等价物:UNIT = 5表示stdin,UNIT = 6表示stdout,UNIT = 0表示stderr。

PROGRAM main 

    PRINT *, "Hello!" 
    CALL flush(6) 
    CALL flush(0) 

END PROGRAM main 
+0

谢谢。我会放弃并报告。我刚刚玩过单元0,5和6的试验 – Tommy 2010-09-07 21:44:19

+0

感谢刚起床,它的工作。非常感谢Kemiisto – Tommy 2010-09-08 08:06:47

+0

@Tommy:“当你决定哪个答案对你最有帮助时,通过点击答案左边的复选框大纲来将其标记为已接受的答案。”从SO FAQ(http://stackoverflow.com/faq) – Wildcat 2010-09-08 10:05:52

0

With >>您每次运行时都会将程序的输出追加到out.txt中。

你可以尝试滚动到out.txt的结尾,看看你的输出是否在那里?

+0

谢谢,是的,我知道>>追加,相同的结果(或结果失败)发生在>但我只是使用>>,因为这是一个脚本中的行失败,所以我只是想让这条线路工作。我从一个空文件out.txt开始,所以这不是问题。 – Tommy 2010-09-07 18:43:15

+0

感谢Dennis和输出行的例子是 – Tommy 2010-09-07 19:03:01

+0

print *,'||||||| runtime =',runtime,'||||||||||' – Tommy 2010-09-07 19:04:00