在python脚本中实现--quiet选项的简单方法是什么

tho*_*mad 14 python

我正在使用命令行python脚本 - 在整个脚本中,我有很多信息,我正在print终端窗口,以便我可以跟随正在发生的事情.

使用OptionParser我想添加一个--quiet选项,这样我就可以使所有输出静音.我要寻找一个Python化的方式去了解整个脚本执行,这样我不会落得做这样的事情:

if not QUIET: # global variable set by OptionParser
    print " my output "
Run Code Online (Sandbox Code Playgroud)

我是python的新手,确定有更好的方法.想法?

Ste*_*202 28

logging如果QUIET使用不同的日志级别,您可以使用并分配那些不应打印的内容.

编辑: THC4K的答案显示了如何执行此操作的示例,假设所有输出都应QUIET设置为静音.请注意,在Python 3 from __future__ import print_function中没有必要:

print = logging.info
logging.basicConfig(level=logging.WARNING if QUIET else logging.INFO,
                    format="%(message)s")
Run Code Online (Sandbox Code Playgroud)

对于不应该被沉默的重要输出--quiet,定义例如iprint:

iprint = logging.warning
Run Code Online (Sandbox Code Playgroud)

  • +1用于推荐日志而不是轮子重新发明 (4认同)
  • 我只是简单地看了一下`logging` - 这是否意味着,代替打印,我可以将文本消息发送到`logging`然后(在`__main__`中决定消息是否'打印',保存到文件中,或者只是完全沉默? (2认同)

Joc*_*zel 13

可以通过运行它来使所有输出静音python myscript.py > /dev/null

更改脚本中的输出流:

if QUIET:
    sys.stdout = open(os.devnull,'a')
    sys.stderr = open(os.devnull,'a')
print something
Run Code Online (Sandbox Code Playgroud)

使用不同的打印功能

from __future__ import print_function
if QUIET:
    def print(*args):
        pass
print( something )
Run Code Online (Sandbox Code Playgroud)

使用日志记录和日志级别

from __future__ import print_function
import logging
logging.basicConfig(level=logging.INFO, format="%(message)s")
print = logging.info
if QUIET:
    logging.basicConfig(level=logging.ERROR)

print( something )
Run Code Online (Sandbox Code Playgroud)