Fortran的彩色终端输出

时间:2011-06-19 13:44:14

标签: fortran fortran90

我的程序向终端输出计算状态,并包含相当多的信息。我想,如果可能的话,颜色代码文本的部分。

我已经看到如何通过引用此站点上的线程在Bash和C ++中完成它。但是,我无法使用其中任何一个来在Fortran(现代)中实现相同的结果。例如,我尝试了这个示例代码,我认为应该可以使用:

PROGRAM test
    PRINT*, 'A great color is \033[95m pink \033[0m.'
END PROGRAM test

我原本期望输出为“粉红色的粉红色”。相反,我得到“一个伟大的颜色是\ 033 [95米粉红色\ 033 [0m。”我不明白我错过了什么。

如果我用以下代码替换代码中的打印行:CALL EXECUTE_COMMAND_LINE(“echo”一个很棒的颜色是\ 033 [95m pink \ 033 [0m。'“))然后我根据需要得到输出。但是我不想继续从我的代码中调用echo。有什么方法可以获得彩色输出吗?

谢谢!

4 个答案:

答案 0 :(得分:17)

转义字符表示为'\ 033'似乎不适合您。我没有fortran方便检查,但你可以通过调用char转换函数尝试显式使用字符而不是c风格转义,即通过调用char(27)来创建实际字符将它构建到正确位置的输出字符串中。

答案 1 :(得分:5)

这是一个古老的问题,但我想我会回答我的答案,以防有人过来(因为我这样做)寻找答案。

我遇到了类似的问题,尝试让转义序列工作。我最终去了man page for gfortran。搜索'escape'引导我进入编译器选项'-fbackslash'。从手册页:

  

从a更改字符串文字中反斜杠的解释   单个反斜杠字符到“C风格”转义字符。该   以下组合扩展为“\ a”,“\ b”,“\ f”,“\ n”,“\ r”,   “\ t”,“\ v”,“\”和“\ 0”到ASCII字符警报,退格,   换页,换行,回车,水平标签,垂直标签,   反斜杠和NUL分别。另外,“\ x”nn,“\ u”nnnn和   “\ U”nnnnnnnn(其中每个n是十六进制数字)被翻译成   与指定代码点对应的Unicode字符。所有   前面带\的字符的其他组合是未展开的。

因此,要使转义序列在Fortran中工作,我们需要做的就是使用此选项进行编译。有一点不同的是,我们必须使用十六进制数字和x而不是八进制数字。在这种特定情况下,我们使用\033代替\x1B。例如,PRINT *, "\x1B[31mThis text is red.\x1B[0m将以红色打印一些文本。

我认为这种方法绝对比每次我们想要使用颜色时连接一堆单独定义的字符更好。

答案 2 :(得分:5)

如果使用ifort进行编译,则需要使用" -assume bscc"进行编译,然后才能使用

PRINT*, 'A great color is \033[95m pink \033[0m.'

代码是:

[90m=dark grey           [30m=black
[91m=peach               [31m=red
[92m=light green         [32m=green
[93m=light yellow        [33m=yellow
[94m=light blue          [34m=blue
[95m=pink                [35m=purple
[96m=light aqua          [36m=aqua
[97m=pearl white

答案 3 :(得分:2)

我刚刚偶然发现了foul模块/库,它似乎完全符合您的要求。我还没有使用它,但是很快就会给它一个,因为从我的Fortran程序中格式化终端输出会非常有用。