我有一个缓慢输出列表的命令。我希望将此列表保存在文件中,并希望在终端上慢慢生成它。
python script.py 2>&1 | tee File.txt
这对我不起作用。保存命令后,在终端上看不到网站列表。
答案 0 :(得分:1)
默认情况下,stdout在进入终端时是行缓冲的,但是在重定向时使用更大的缓冲区,因此tee和终端直到稍后才看到输出。
有关如何使script.py不缓冲输出的方法,请参见此问题的答案Disable output buffering
例如script.py是:
$this->input->post('databse_column_name')=$variable_name_which_content_file_name
运行#!/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
,则整个输出都将被缓冲,直到打印完所有内容5秒钟后脚本完成为止,什么都不会打印。
flush=True
将stderr重定向到stdout,因此您可能需要对stderr和stdout应用相同的缓冲。
答案 1 :(得分:0)
每the Linux Documentation Project (TLDP),
2>&1 #将stderr重定向到stdout。 #错误消息被发送到与标准输出相同的位置。
然后
&>文件名 #将stdout和stderr都重定向到文件“文件名”。
因此,将它们都通过管道传输到文件中,
Command &> | tee File.txt
或者只是stdout
,
Command | tee File.txt