gpt4 book ai didi

python - 如何抽象stdin/stdout和文件?

转载 作者:太空宇宙 更新时间:2023-11-03 14:37:19 28 4
gpt4 key购买 nike

我正在尝试编写一个Python脚本,它允许用户在stdin/stdout和输入/输出文件之间切换。但我不确定我的实现是否正确:

#!/usr/bin/python3

import fileinput
import sys

from contextlib import contextmanager
from contextlib import redirect_stdout


def foo(file):
return ''.join([line for line in file])


@contextmanager
def run(input_file, output_file):
stdin = '-' if input_file is None else input_file
stdout = sys.stdout if output_file is None else open(output_file, 'w')
with fileinput.input(stdin) as stdin, stdout:
with redirect_stdout(stdout):
print(foo(stdin))
  1. 代码是否正确管理资源?
  2. 如何正确处理字符编码?我希望所有内容都采用 utf-8 格式。
  3. 上述代码还有改进的空间吗?

最佳答案

我认为你需要这样做。您不需要将 run() 本身设置为 @contextmanager - 它所需要做的就是使用一个(或多个,并且两个 fileinput.inputredirect_stdout 已经是了)。我不确定您为什么使用 fileinput.input 因为似乎只涉及一个输入文件。

from contextlib import redirect_stdout
import fileinput
import sys

def foo(file):
return ''.join([line for line in file])

def run(input_file, output_file):
stdin = '-' if input_file is None else input_file
stdout = sys.stdout if output_file is None else open(output_file, 'w')
with fileinput.input(stdin) as stdin, redirect_stdout(stdout):
print(foo(stdin))

run('input.txt', 'output.txt')
run('input.txt', None)

关于python - 如何抽象stdin/stdout和文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46839127/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com