当前位置: 首页 > 科技观察

每日一技能:为什么大于号不能重定向?

时间:2023-03-20 02:08:35 科技观察

很多人应该都知道,在命令行中,可以使用大于号>将程序打印的文本重定向到文件中。比如有这样一个程序:foriinrange(10):print(f'Thisisline{i+1}')直接运行效果是这样的:现在,我们使用>将输出重定向到一个文件:As可以看到,当代码运行时,程序没有任何输出。但是当我们打开文件的时候,发现数据已经在文件中了。但是,今天我遇到了一个Python文件。直接运行的时候,和正常的没什么区别,如下图:但是,当我尝试重定向的时候,发现数据还是直接打印到终端,如下图:And,youcan看到生成的result2.txt文件也是空的。出现这个问题的原因是有两种方式输出到终端,即stdout和stderr。当你直接使用print函数打印数据时,你输出的内容默认是通过stdout输出的。>符号默认只会将stdout的输出重定向到一个文件。如果我们想通过stderr输出数据,代码可以这样写:importsysforiinrange(10):print(f'Thisisline{i+1}',file=sys.stderr)添加一个参数file=sys打印函数.stderr,使打印内容通过stderr输出。这样直接用>就不能直接到文件了。那么,如果我想定向到一个文件怎么办?这时候我们可以修改重定向的命令:python3test_print2.py1>out.txt2>err.txt运行效果如下图所示:这样stdout输出的内容,会被重定向到out.txt文件,stderr输出的内容会重定向到err.txt。如果掌握了这个方法,那么在打印日志的时候,我们就可以通过不同的方式输出不同的日志。如果您只是需要在命令行上查看内容,那么它没有什么区别。但是当我们要重定向到一个文件的时候,我们可以区分不同类型的内容,分别处理。这样数据就不会混淆。本文转载自微信公众号“闻所未闻的密码”,可通过以下二维码关注。转载本文请联系Code公众号。