在Python中正确使用“with”和stdout

时间:2015-03-30 15:01:26

标签: python

我想要以下基本构造:

if fname:
    fhandle=open(fname,"w")
else:
    fhandle=sys.stdout

...code using fhandle for output....

通常,我会使用“with”打开文件,如下所示:

with open(name,"w") as fhandle:
      .... code using handle for output....

有没有办法混合这两个结构,以便我可以传递一些东西 在with构造中的open函数会使fhandle指向sys.stdout吗?或者,如果这是一个愚蠢的想法,那么pythonic的方法是什么?

3 个答案:

答案 0 :(得分:0)

我认为,您所需要的只是ternary operator

with open('moo.txt', 'w') if YOU_CONDITION else sys.stdout as f:
    f.write('hello')

>> hello

答案 1 :(得分:0)

你可以这样做:

import sys
from contextlib import contextmanager

@contextmanager
def func(fname):
    fhandle = open(fname,"w") if fname else sys.stdout
    yield fhandle
    if fname:
        fhandle.close()

并像这样使用它:

with func(fname) as fhandle:
    ... your code ...

答案 2 :(得分:0)

将代码放在函数中处理输出。

def handle_output(fhandle):
    # do stuff

if fname:
    with open(fname,"w") as fhandle:
        handle_output(fhandle)
else:
    fhandle=sys.stdout
    handle_output(fhandle)

欢迎提供反馈意见!