linux中输出重定向,python 输出重定向到文件

  linux中输出重定向,python 输出重定向到文件

  Linux shell重定向有两种类型:输入重定向和输出重定向。顾名思义,I/O重定向意味着“改变输入和输出的方向”。

  那么,输入输出方向是什么呢?的标准输入输出方向是什么?

  通常我们从键盘上读取用户输入的数据,并将数据带入程序(C语言程序,shell脚本程序等。)使用。这是标准的输入方向,从键盘到程序。

  反过来,程序中也产生数据。这些数据通常直接显示在显示器上。这是从程序到显示器的标准输出方向。

  尝试提取想法。实际上,输入和输出方向就是数据的流动方向:

  输入方向是指数据流向程序的方向。默认情况下,数据从键盘流向程序。改变方向后,数据从其他位置流出。这是输入重定向。

  输出方向是指数据从程序流向何处。默认情况下,数据从程序流向监视器,但是当方向改变时,数据流向其他位置。这是输出重定向。

  和硬件描述符。

  有很多硬件设备。常见的输入设备包括键盘、鼠标、麦克风和平板电脑,而输出设备包括显示器、投影仪和打印机。但是,在Linux上,标准输入设备指的是键盘,而标准输出设备指的是显示器。

  Linux上的所有文件,包括标准输入设备(键盘)和标准输出设备(显示器),都是文件。

  为了指示和区分打开的文件,Linux给每个文件分配一个ID。ID是一个称为文件描述符的整数。

  表1:输入和输出的文件描述符

  文件描述符

  文件名

  类型

  五金器具

  0

  标准输入设备

  标准输入文件

  键盘

  一个

  标准输出

  标准输出文件

  班长

  2

  标准错误

  标准错误输出文件

  班长

  Linux程序在执行任何I/O操作时都会读取或写入文件描述符。文件描述符只是一个与打开的文件相关的整数。接下来可能是硬盘上的常规文件、FIFO、管道、终端、键盘、显示器甚至网络连接。

  默认情况下,选择stdin、stdout和stderr,并且在重定向期间可以保留三个文件描述符:0、1和2。

  Linux shell输出重定向

  输出重定向是将命令的结果输出到另一个位置(通常是一个文件),而不是显示它。这样做最大的好处就是保存命令的结果,以便在需要的时候随时查询。下表显示了Bash支持的输出重定向符号。

  表2:2:Bash支持的输出重定向符号

  类型

  标志

  功能

  标准输出重定向

  命令文件

  将命令的正确输出结果输出到要覆盖的文件file。

  命令文件

  此外,将命令的正确输出结果输出到文件file。

  标准错误输出重定向

  2命令文件

  将命令错误信息输出到要覆盖的文件file。

  2命令文件

  此外,命令错误消息会输出到文件中。

  同时保存正确的输出和错误消息

  命令文件21

  通过覆盖,正确的输出和错误消息同时保存在同一个文件中。

  命令文件21

  使用其他方法将正确的输出和错误消息同时保存在同一文件中。

  命令1 2文件2

  以覆盖的方式,正确的输出结果输出到file1文件,错误信息输出到file2文件。

  命令1 2文件2

  另外,正确的输出结果输出到文件1文件,错误消息输出到文件2文件。

  命令文件2文件

  【推荐】这两个写方法文件打开两次,会造成资源竞争,所以stdout和stderr互相覆盖。《结合Linux文件描述符谈重定向,彻底理解重定向的本质》段进行详细分析。

  命令文件2文件

  在输出重定向中,表示封面,表示添加。

  注意

  输出重定向的完整格式其实是fdfile或者fdfile,其中fd表示文件描述符,否则默认为1,这是标准的输出文件。

  如果文件描述符为1,则为1。

  全部省略不写,如上表所示;当然,如果你愿意,你也可以把命令文件写成command 1file,但没必要这样做。

  当文件描述符是一个大于1的值时,例如2,它必须被写入。

  需要注意的是,fd和之间不能有空格,否则Shell将无法解析;和文件之间的空格是可选的。为了一致性,我习惯两边不加空格。

  下面的陈述是一个反面例子:

  echo c.biancheng.net 1 log.txt

  请注意1和之间的空格。echo命令的输出结果是c.biancheng.net。我们的初衷是将输出结果重定向到log.txt,然而辛苦的汕头打开log.txt文件后,发现文件内容是c.biancheng.net 1,这是多余空格导致的解析错误。也就是说,Shell将该语句理解为以下形式:

  echo c.biancheng.net 1 1log.txt

  输出重定向示例

  【例1】用附加的方式将echo命令的输出结果写入demo.txt文件。

  #!/可爱的小懒虫/狂欢

  对于 C语言中文网站 3358c.biancheng.net/has成立7年 日均数万IP 中的str

  做

  Echo $str demo.txt #将输入结果作为追加重定向到文件

  完成的

  运行上述脚本并使用cat demo.txt查看文件内容,如下所示:

  c语言中文网

  http://c.biancheng.net/

  已经成立七年了。

  日IP数万

  [示例2]将ls -l命令的输出结果重定向到一个文件。

  [c.biancheng.net]$ ls -l #先预览输出

  总剂量16

  DRWXR-XR-X.2根根2016年7月1日abc

  -RW-R-R-. 1 mozhi Yan mozhi Yan 399 3月11日17:12 demo.sh

  -RW-RW-R-.1莫之言莫之言67年3月22日17:16 demo.txt

  -RW-RW-R-.1莫之言莫之言278年3月16日17:17 main.c

  -RWXR-XR-X.1莫之言莫之言187 3月22日17:16 test.sh

  [c.biancheng.net]$ ls-ldemo . txt #重定向

  [c.biancheng.net]$ cat demo.txt #查看文件内容

  总剂量12

  DRWXR-XR-X.2根根2016年7月1日abc

  -RW-R-R-. 1 mozhi Yan mozhi Yan 399 3月11日17:12 demo.sh

  -RW-RW-R-.1莫之言莫之言0年3月22日17:21 demo.txt

  -RW-RW-R-.1莫之言莫之言278年3月16日17:17 main.c

  -RWXR-XR-X.1莫之言莫之言187 3月22日17:16 test.sh

  输出重定向错误示例

  正确执行命令时,没有错误消息。我们必须故意使命令执行错误,如下所示:

  [c.biancheng.net]$ ls java #先预览错误信息

  Ls:无法访问java:没有这样的文件或目录。

  [c.biancheng.net]$ ls Java 2 err . log #重定向

  [c.biancheng.net]$ cat err.log #查看文件

  Ls:无法访问java:没有这样的文件或目录。

  同时保存正确的输出和错误消息

  [示例1]将正确的结果和错误信息保存在文件中,例如:

  [c . biancheng . net]$ ls-l out . log 21

  [c . biancheng . net]$ ls Java out . log 21

  [c.biancheng.net]$ cat out.log

  总剂量12

  DRWXR-XR-X.2根根2016年7月1日abc

  -RW-R-R-. 1 mozhi Yan mozhi Yan 399 3月11日17:12 demo.sh

  -RW-RW-R-.1莫之言莫之言278年3月16日17:17 main.c

  -RW-RW-R-.1 Mozhiyan Mozhiyan 0年3月22日17:39 out.log

  -RWXR-XR-X.1莫之言莫之言187 3月22日17:16 test.sh

  Ls:无法访问java:没有这样的文件或目录。

  out.log的最后一行是错误消息,其他所有行都是正确的输出结果。

  【例2】上面的例子把正确的结果和错误的信息都写到同一个文件里,会造成视觉上的混乱,不利于以后的检索,所以我建议把正确的结果和错误的信息分别保存在不同的文件里,也就是按照下面的形式写:

  ls -l out.log 2err.log

  这样,正确的输出结果将被写入out.log,而错误的信息将被写入err.log

  /dev/null文件

  如果您不想将命令的输出保存到文件或显示在屏幕上,这将干扰命令的执行,您可以将命令的所有结果重定向到/dev/null文件。如下所示:

  ls -l /dev/null

  你可以把/dev/null想象成Linux系统的垃圾箱。任何放入垃圾箱的数据都将被丢弃,并且无法恢复。

  Linux外壳输入重定向

  输入重定向意味着改变输入的方向。它不使用键盘作为命令输入的来源,而是使用文件作为命令的输入。

  表3:3:Bash支持的输出重定向符号

  标志

  解释

  命令

  使用文件file的内容作为命令的输入。

  命令

  从标准输入(键盘)读取数据,直到遇到分隔符(分隔符可以是用户定义的任何字符串)。

  命令文件2

  File1作为命令的输入,命令的处理结果输出到file2。

  与输出重定向类似,输入重定向的完整写入是fd。

  输入重定向的示例

  [例1]统计文档中有多少行文本。

  Linux wc命令可以用来统计文本,包括字数,行数和字节数。其用法如下:

  WC[选项][文件名]

  其中-c选项统计字节数,-w选项统计字数,-l选项统计行数。

  计算readme.txt文件中有多少行文本:

  [c.biancheng.net]$ cat readme . txt #预览文件的内容

  c语言中文网

  http://c.biancheng.net/

  已经成立七年了。

  日IP数万

  $ wc -l

  四

  【例2】逐行读取文件内容。

  #!/可爱的小懒虫/狂欢

  在读取字符串时;做

  echo $str

  完成的

  运行结果:

  c语言中文网

  http://c.biancheng.net/

  已经成立七年了。

  日IP数万

  这种编写方法称为代码块重定向,意思是将一组命令同时重定向到一个文件。我们会在《Shell代码块重定向》部分详细讲解。

  【例3】统计用户在终端输入的文本行数。

  这里我们使用输入重定向符号。

  $ wc -l

  123

  789

  字母表

  坐标

  结束

  四

  wc命令将等待输入,直到它遇到分隔符结尾。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: