如何将终端输出写入文件

21 投票
3 回答
86724 浏览
提问于 2025-04-18 04:44

我想把脚本的结果保存到一个文件里。比如说,下面是我的脚本:

#!/usr/bin/env python
i=0
while i<10:
  a=raw_input('Write a number')
  print 'Result%s'%str(2*a)
  i+=1

我想把打印出来的值保存到文件中。我知道在脚本里可以用 f=open()... 这种方式来实现,但我想通过终端的输出方式来保存。我听说可以用 subprocess 这个模块,但我不太确定这样做是否正确。

3 个回答

21
python file.py &> out.txt

这段代码会把所有的输出,包括错误信息,都保存到一个叫 out.txt 的文件里。

25

你可以在终端中使用 > 将输出重定向到一个文件里:

python your_script.py > output.txt
22

在我看来,这是一种正确的Python写法,不依赖于系统的命令行:

import sys
f = open("test.out", 'w')
sys.stdout = f
print "test"
f.close()

在Python中,你可以改变默认的 stdout 对象。只需要把你想要的东西赋值给 sys.stdout。我觉得这个对象只需要有一个 write 方法(虽然我不太确定)。

这样做就可以了:

import sys
f = open("test.out", 'w')
sys.stdout = f

i=0
while i<10:
  a=raw_input('Write a number')
  print 'Result%s'%str(2*a)
  i+=1

f.close()

这基本上和 0605002 提出的建议是一样的,适用于支持他使用的语法的系统,但这是用纯Python实现的,应该更具可移植性。

还有一种更符合Python风格的方法,正如评论中提到的:

import sys

with open("test.out", 'w') as f:
  sys.stdout = f

  i=0
  while i<10:
    a=raw_input('Write a number')
    print 'Result%s'%str(2*a)
    i+=1

当然,你可以重构你的“客户端代码”,把它做成一个函数或者其他形式。

撰写回答