如何将特定的print语句重定向到python

时间:2017-05-29 02:51:00

标签: python

我使用以下语句将python程序的输出重定向到log_file并且它可以工作。

import sys
sys.stdout = open(log_file, 'a', buffering=1)

但是,我想将一个或两个特定的打印语句传递给另一个平面文件(假设是sample_file.txt)。我怎样才能做到这一点 ?

4 个答案:

答案 0 :(得分:1)

如果您使用的是python3,则可以选择将文件对象传递给打印功能。像这样:

>>> f = open('sample_file.txt', 'w')
>>> print("hello", file = f)
>>> print("hello1", file = f)
>>> print("hello2", file = f)
>>> f.close()

或者,更好的是,使用上下文管理器。

>>> with open('etc.txt','w') as f:
...     print("hello", file = f)
...     print("hello2", file = f)
...     print("hello2", file = f)

在python2中,您也可以使用此功能。但是你需要从python3导入print()函数。添加此导入语句。

from __future__ import print_function 

答案 1 :(得分:1)

在较旧的Python上,你可以使用'雪佛龙打印'从特定打印语句打印到文件的print statement形式:

Python 2.7.13 (default, Dec 19 2016, 07:22:39) 
[GCC 4.2.1 Compatible Apple LLVM 8.0.0 (clang-800.0.42.1)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> f=open('/tmp/file.txt','a')
>>> print "hello"
hello
>>> print >>f, 'hello'
>>> f.close()
>>> open('/tmp/file.txt').read()
'hello\n'

表单print >>fh将后面的内容打印到文件句柄fh

或者在Python 2中导入打印功能,以便能够为打印添加文件句柄。

答案 2 :(得分:0)

假设您想要将新行添加到现有文本文件中,您可以非常简单地修改代码:

import sys
sys.stdout = open(log_file, 'a', buffering=1)
with open("sample_file.txt", "a") as f:
    f.write("line 1\n")
    f.write("line 2\n")

请注意,文件"sample_file.txt"将在运行Python文件的任何文件夹/目录中进行编辑,除非您将其更改为指定完整(或相对)路径。

答案 3 :(得分:0)

优雅的解决方案是以下列方式使用上下文管理器

print("hello")  # Prints to the console

with log_to_file(sys, LOG_FILE_PATH):
    print("hello")  # Prints to the file

print("hello")  # Prints to the console

构建此上下文管理器将使用以下代码

from contextlib import contextmanager
import sys

@contextmanager
def log_to_file(sys, LOG_FILE_PATH):
    log_file = open(LOG_FILE_PATH, 'a')
    sys.stdout = log_file
    yield
    log_file.close()
    sys.stdout = sys.__stdout__

现在您可以通过传递不同的文件路径来决定每次写入的位置,并且您的代码将是干净的和Pythonic