如何将终端输出写入文件

19

我想将脚本的结果保存到文件中。以下是脚本示例:

#!/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模块,但不确定是否正确。


8
这是一个在命令行中运行Python脚本并将输出重定向到名为"out.txt"的文本文件的命令。 - Ashwini Chaudhary
你想保存什么?结果还是所有的转换? - Farvardin
谢天谢地,这个存在。我想制作一个Python IDE,非常感谢你有勇气提出这个问题。 - user13566917
3个回答

23

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

python your_script.py > output.txt

我不喜欢你依赖于shell =)。 - luk32
1
在我看来,OP知道可以使用open()函数将内容写入文件,但他想要使用print而不是write。但我必须承认,这个意图并不太清楚。也许他根本不想改变他的代码,那么最好的方法就是使用终端或子进程。 - luk32

22

在不依赖于系统 shell 的情况下,这是 Pythonic 的正确方式:

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

当然可以重构你的“客户端代码”并将其转化为一个函数或其他形式。


找不到 with 语句!! :-) - Ashwini Chaudhary
@Aशwiniचhaudhary 嗯,我还不太擅长Python =(。但是我已经使用了f.close()!=)我编辑了问题并添加了更多的Pythonic方式。我希望现在每个人都对答案满意。 - luk32
好的,它可以工作。谢谢。我还有一个问题:是否可能根据下面的代码示例保存终端的结果`import sys` `f = open("test.out", 'w')` `sys.stdout = f` `"在终端执行某些操作(由于运行另一个脚本),并将结果保存到文件中"` `f.close()` - qwerty12345
@qwerty12345 在我看来,最好使用subprocess。您可以指定用于stdinstdoutstderr的内容。您可以搜索“如何从Python运行另一个脚本”,有几种方法,而且很可能已经有人问过了。我认为也可以使用import实现这一点。 - luk32

21
python file.py &> out.txt

这将把所有输出,包括错误信息,重定向到out.txt文件。


3
这很完美。许多答案都错过了这一点。 - Binoy S Kumar
使用 &> 和仅使用 > 有什么区别? - ru111
2
&> 包括错误信息,而 > 不包括。 - mohaghighat
你知道我怎么样才能写入文件而不是追加到它吗?如果我再次运行它,先前文件的输出不会被覆盖,而是被追加到后面。 - greysou1
在调用此命令之前,删除 out.txt 文件怎么样?
rm out.txt; python file.py &> out.txt
- mohaghighat

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接