【问题标题】:Save command output to file and see it on the terminal将命令输出保存到文件并在终端上查看
【发布时间】:2019-06-11 02:34:41
【问题描述】:

我有一个缓慢输出列表的命令。我希望将此列表保存在文件中,并在终端上缓慢生成它。

python script.py 2>&1 | tee File.txt

这对我不起作用。保存命令时,我看不到终端上出现的网站列表。

【问题讨论】:

  • 您能否提供更多关于这与 Python 的关系的信息?这是打印到stdin 的python 脚本吗?
  • 这是一个 selenium python 脚本,输出网站列表的标题
  • 你试过在没有shell重定向的情况下运行它吗? Command 本身是否正确输出到终端?
  • 是的,输出正常

标签: python linux terminal


【解决方案1】:

默认情况下,stdout 在进入终端时是行缓冲的,但在重定向时使用更大的缓冲区,因此 tee 和终端直到稍后才能看到输出。

有关使 script.py 不缓冲输出的方法,请参阅此问题的答案Disable output buffering

例如如果 script.py 是:

#!/usr/bin/python3
import time
for i in range(5):
    print('This is line', i, flush=True)
    time.sleep(1)

运行./script.py | tee File.txt 将在执行该行时将每一行打印到终端 - 相隔一秒。

如果您删除 flush=True,则整个输出都将被缓冲,直到脚本在 5 秒后打印完所有内容时才会打印任何内容。

2>&1 将 stderr 重定向到 stdout,因此您可能需要对 stderr 和 stdout 应用相同的缓冲。

【讨论】:

  • 谢谢,原来如此! “python -u script.py”解决了。
【解决方案2】:

the Linux Documentation Project (TLDP)

2>&1 # 将标准错误重定向到标准输出。 # 错误消息与标准输出发送到同一位置。

还有,

&>文件名 # 将 stdout 和 stderr 都重定向到文件“filename”。

所以要将两者都通过管道传输到文件中,

Command &> | tee File.txt

或者只是stdout

Command | tee File.txt

【讨论】:

  • 这些都不起作用,他们根本不在终端上写任何东西。我记得很久以前我可能遇到过同样的问题,有人告诉我只需在命令中添加一个“-letter”来刷新终端,但我不完全记得它是什么。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-14
  • 2023-02-16
  • 1970-01-01
  • 2014-11-07
  • 1970-01-01
相关资源
最近更新 更多