【问题标题】:How to write output of terminal to file如何将终端的输出写入文件
【发布时间】:2014-04-29 12:02:14
【问题描述】:

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

#!/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,但我不知道它是否正确。

【问题讨论】:

  • python file.py &gt; out.txt ??
  • 你想保存什么?结果还是全部转化?
  • 谢天谢地,这是存在的。我想做一个 Python IDE,比你有勇气问这个问题。

标签: python


【解决方案1】:
python file.py &> out.txt

这会将包括错误在内的所有输出定向到 out.txt。

【讨论】:

  • 这是完美的。许多答案错过了这个
  • 使用 &> 和只使用 > 有什么区别?
  • &> 也包含错误但 > 不包含。
【解决方案2】:

IMO 这是正确的 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

当然你可以重构你的“客户端代码”,让它成为一个函数或其他东西。

【讨论】:

  • with 未找到声明!! :-)
  • @Aशwiniचhaudhary 是的,我还不是很擅长 python =(。但我做了f.close()! =) 我编辑了问题并添加了更多 pythonic 方式。我希望每个人都对现在的答案感到满意。
  • 好的,可以了。谢谢。我还有一个问题:是否可以根据以下代码示例保存终端结果import sysf = open("test.out", 'w')sys.stdout = f"on terminal execute some operation (due to run another script) and I save result from terminal to the file" f.close()
  • @qwerty12345 IMO,最好使用子进程。您可以指定将用于stdinstdoutstderr 的内容。您可以查找“如何从 python 运行另一个脚本”。有几种方法,很可能有人已经问过了。我认为也可以使用import
【解决方案3】:

您可以在终端中使用&gt; 将输出重定向到文件:

python your_script.py > output.txt

【讨论】:

  • 我不喜欢你在 shell =) 上中继。
  • IMO OP 知道写入文件可以使用open() 完成,但他想使用print 而不是write。但我不得不承认,这还不是很清楚。也许他根本不想改变他的代码,那么最好的办法是使用终端或子进程。
猜你喜欢
  • 1970-01-01
  • 2013-07-02
  • 1970-01-01
  • 2016-04-19
  • 2017-07-07
  • 2016-04-11
  • 1970-01-01
  • 2022-10-08
  • 1970-01-01
相关资源
最近更新 更多