在Python 3中将打印输出定向到.txt文件

Clo*_*one 47 python python-3.x

有没有办法将所有打印输出保存到python中的txt文件?让我说我的代码中有这两行,我想将打印输出保存到一个名为的文件output.txt.

print ("Hello stackoverflow!")
print ("I have a question.")
Run Code Online (Sandbox Code Playgroud)

我希望output.txt文件包含

Hello stackoverflow!
I have a question.
Run Code Online (Sandbox Code Playgroud)

Aar*_*sen 84

给出print一个file关键字参数,其中参数的值是文件流.我们可以使用以下open函数创建文件流:

print("Hello stackoverflow!", file=open("output.txt", "a"))
print("I have a question.", file=open("output.txt", "a"))
Run Code Online (Sandbox Code Playgroud)

Python文档中print:

所述file参数必须是与对象write(string)方法; 如果它不存在或None,sys.stdout将被使用.

以及以下文档open:

打开file并返回相应的文件对象.如果无法打开文件,OSError则引发a.

"a"作为第二个参数open是指"追加" -换句话说,文件的现有内容不会被覆盖.如果您希望覆盖该文件,请使用"w".

  • @Allan,您应该使用`with`语句打开文件.这会创建一个`file`对象,并在整个块中保持打开状态,然后在最后关闭它.查看第一个示例[在本文中](http://preshing.com/20110920/the-python-with-statement-by-example/).如果您还有其他问题,请与我们联系! (8认同)

Rom*_*ein 13

您可以将stdout重定向到文件"output.txt":

import sys
sys.stdout = open('output.txt','wt')
print ("Hello stackoverflow!")
print ("I have a question.")
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法做到这一点并在控制台中显示文本?那么同时打印到控制台和文件?我希望能够看到我所有的进度打印语句,因此我知道程序在执行中的位置,以及故障排除语句,但也将所有这些转储到文本文件中. (6认同)
  • @Korzak请检查其他问题中的“print_both”函数 /sf/answers/1694427661/ 以打印到控制台和输出文件 (2认同)

gie*_*s0r 5

使用日志记录模块

def init_logging():
    rootLogger = logging.getLogger('my_logger')

    LOG_DIR = os.getcwd() + '/' + 'logs'
    if not os.path.exists(LOG_DIR):
        os.makedirs(LOG_DIR)
    fileHandler = logging.FileHandler("{0}/{1}.log".format(LOG_DIR, "g2"))
    rootLogger.addHandler(fileHandler)

    rootLogger.setLevel(logging.DEBUG)

    consoleHandler = logging.StreamHandler()
    rootLogger.addHandler(consoleHandler)

    return rootLogger
Run Code Online (Sandbox Code Playgroud)

获取记录器:

logger = init_logging()
Run Code Online (Sandbox Code Playgroud)

并开始记录/输出:

logger.debug('Hi! :)')
Run Code Online (Sandbox Code Playgroud)


小智 5

另一种变体可以是...之后一定要关闭文件

import sys
file = open('output.txt', 'a')
sys.stdout = file

print("Hello stackoverflow!") 
print("I have a question.")

file.close()
Run Code Online (Sandbox Code Playgroud)


S3D*_*DEV 5

另一种无需更新 Python 代码的方法是通过 console 重定向

基本上,print()像往常一样使用Python 脚本,然后从命令行调用脚本并使用命令行重定向。像这样:

$ python ./myscript.py > output.txt
Run Code Online (Sandbox Code Playgroud)

您的output.txt文件现在将包含 Python 脚本的所有输出。

编辑:
解决评论;对于 Windows,将正斜杠更改为反斜杠。
(即.\myscript.py