从字面意思上将,数据流重定向就是将“数据给他传导到其他地方去”。
实际上也没错,数据流重导向就是将某个命令运行后应该要出现在屏幕上的数据,给他传输到其他的地方,例如文件或者是装置 (例如打印机之类的)。
我们知道,计算机中输入输出分为三种: - 标准输入: stdin - 标准输出: stdout - 标准错误输出: stderr
我们利用数据流重导向可以将上述三者分开(主要是stdout和stderr)
- stdin :代码为 0 ,使用 < 或 <<
- stdout :代码为 1 ,使用 > 或 >>
- stderr :代码为 2 ,使用 2> 或 2>>
stdout
>
重定向,将正确的内容覆盖性写入文件中
>>
重定向,将正确的内容追加写入文件中
1 | zuo@zuo-VirtualBox:~/Sample$ echo "目录树" > rcd |
stderr
2>
2>>
将错误的信息进行重定向
1 | # 将报错信息重定向到文件Stderr中 |
利用重定向将正确输出和保存信息分开
比如有Temp.py如下
1 | # -*- coding: utf-8 -*- |
如果直接运行:
1 | zuo@zuo-VirtualBox:~/Sample$ python Temp.py |
利用重定向,可以把两股数据流分开:
1 | zuo@zuo-VirtualBox:~/Sample$ python Temp.py > Stdout 2> Stderr |
stdin
<
<<
以最简单的说法来说, stdin的重定向就是 “将原本需要由键盘输入的数据,改由文件内容来取代” 的意思。 我们先由底下的 cat 命令操作来了解一下什么叫做“键盘输入”。我们前面提到过,如果cat
指令不带文件名,就是从标准输入流读取并打印在屏幕上的意思,利用stdout我们可以实现对文件的直接输入:
1 | # 输入并重定向 |
利用对 stdin 的重定向,我们可以用纯文本文件取代键盘的输入,也就是说,用某个文件的内容来取代键盘的敲击:
1 | # 将标准输入重定向为从文件 temp 中读取 |