天道酬勤,学无止境

如何将终端的输出写入文件(How to write output of terminal to file)

问题

我想将脚本的结果保存到文件中。 脚本示例:

#!/usr/bin/env python
i=0
while i<10:
  a=raw_input('Write a number')
  print 'Result%s'%str(2*a)
  i+=1

我想保存到文件打印值。 我知道我可以在脚本f=open()...中做到这一点,但我想在终端中使用输出来做到这一点。 我读到我可以使用模块subprocess但我不知道它是正确的。

回答1

IMO 这是正确的 pythonic 方式,不依赖于系统外壳:

import sys
f = open("test.out", 'w')
sys.stdout = f
print "test"
f.close()

在 python 中,您可以更改默认的stdout对象。 您只需要为sys.stdout分配您想要的任何内容。 我认为对象只需要定义一个write方法(虽然不是绝对确定)。

这会做:

import sys
f = open("test.out", 'w')
sys.stdout = f

i=0
while i<10:
  a=raw_input('Write a number')
  print 'Result%s'%str(2*a)
  i+=1

f.close()

它与 0605002 为支持他使用的语法的系统所建议的基本相同,但在纯 python 中实现并且应该更便携。

更pythonic的方式,根据评论建议:

import sys

with open("test.out", 'w') as f:
  sys.stdout = f

  i=0
  while i<10:
    a=raw_input('Write a number')
    print 'Result%s'%str(2*a)
    i+=1

当然,您可以重构“客户端代码”并使其成为函数或其他东西。

回答2

您可以在终端中使用>将输出重定向到文件:

python your_script.py > output.txt
回答3
python file.py &> out.txt

这会将包括错误在内的所有输出定向到 out.txt。

标签

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • 如何将subprocess.call()输出推送到终端和文件?(How do I push a subprocess.call() output to terminal and file?)
    问题 我有subprocess.call(["ddrescue", in_file_path, out_file_path], stdout=drclog) 。 我希望在运行时在终端中显示ddrescue并将输出写入文件drclog。 我试过使用subprocess.call(["ddrescue", in_file_path, out_file_path], stdout=drclog, shell=True) ,但这给了我ddrescue输入错误。 回答1 如果将ddrescue的stdout / stderr重定向到管道时ddrescue不会更改其输出,则可以使用tee实用程序在终端上显示输出并将其保存到文件中: $ ddrescue input_path output_path ddrescue_logfile |& tee logfile 如果确实如此,那么您可以尝试使用script实用程序提供一个伪tty: $ script -c 'ddrescue input_path output_path ddrescue_logfile' -q logfile 如果它直接写入终端,则可以使用screen捕获输出: $ screen -L -- ddrescue input_path output_path ddrescue_logfile 默认情况下
  • 为什么打印到标准输出这么慢? 可以加快速度吗?(Why is printing to stdout so slow? Can it be sped up?)
    问题 我一直对使用print语句简单地输出到终端需要花费多长时间感到惊讶/沮丧。 在经历了最近令人痛苦的缓慢日志记录之后,我决定进行调查,并惊讶地发现几乎所有时间都在等待终端处理结果。 可以以某种方式加快对stdout的写入速度吗? 我编写了一个脚本(此问题底部的“ print_timer.py ”)来比较将100k行写入stdout,文件以及将stdout重定向到/dev/null时的时序。 计时结果如下: $ python print_timer.py this is a test this is a test <snipped 99997 lines> this is a test ----- timing summary (100k lines each) ----- print :11.950 s write to file (+ fsync) : 0.122 s print with stdout = /dev/null : 0.050 s 哇。 为了确保python在幕后不做任何事情,例如认识到我将stdout重新分配给/ dev / null之类的东西,我在脚本之外进行了重定向... $ python print_timer.py > /dev/null ----- timing summary (100k lines each) ----- print : 0
  • 在运行使用 exec 和 tee 将 stdout 输出发送到终端和文件的脚本后,shell 提示似乎不会再次出现(shell prompt seemingly does not reappear after running a script that uses exec with tee to send stdout output to both the terminal and a file)
    问题 我有一个 shell 脚本,它将所有输出写入日志文件和终端,这部分工作正常,但是如果我执行脚本,只有按 Enter 时才会出现新的 shell 提示。 为什么会这样,我该如何解决? #!/bin/bash exec > >(tee logfile) echo "output" 回答1 首先,当我测试这个时,总会有一个新的 shell 提示,只是有时字符串output在它之后,所以提示不是最后一个。 是不是你忽略了? 如果是这样,似乎存在一种竞争,即 shell 在后台的tee完成之前打印提示。 不幸的是,这不能通过在 shell 中wait tee ,请参阅 unix.stackexchange 上的这个问题。 撇开脆弱的解决方法不谈,我认为解决这个问题的最简单方法是将整个脚本放在一个列表中: { your-code-here } | tee logfile 回答2 如果我运行以下脚本(从echo抑制换行符),我会看到提示,但看不到“输出”。 该字符串仍会写入文件。 #!/bin/bash exec > >(tee logfile) echo -n "output" 我怀疑的是:您有三个不同的文件描述符试图写入同一个文件(即终端):shell 的标准输出、shell 的标准错误和tee的标准输出。 shell 同步写入:首先echo到标准输出,然后提示到标准错误
  • 如何在不使用syscall的情况下将字符串打印到x86-64程序集(NASM)中的终端?(How to print a string to the terminal in x86-64 assembly (NASM) without syscall?)
    问题 我是组装的新手,并且想首先尝试获得一种直观的感觉,以了解如何在终端上打印字符串如何工作,而无需经历操作系统抽象(Linux或OSX)的情况。 (编者注:可接受的答案仅适用于Linux。x86-64 MacOS使用类似的系统调用约定,但使用不同的电话号码。) tl; dr如何在尽可能低的级别(即不使用syscall)下在OSX上使用NASM在x86-64程序集中写入stdout(打印到终端)? BareMetal OS如何做到这一点? 大多数示例显示如下内容: global start section .text start: mov rax, 1 mov rdi, 1 mov rsi, message mov rdx, 13 syscall mov eax, 60 xor rdi, rdi syscall message: db "Hello world", 10 在这里,他们使用syscall来打印字符串,这取决于操作系统。 我不是在寻找,而是在如何以最低的级别直接将字符串写入stdout。 我认为有一个exokernel项目,即BareMetal OS。 尽管由于我是组装的新手,所以我还不太了解他们是如何做到这一点的。 从表面上看,两个重要文件是: syscalls / screen.asm 系统调用/string.asm 似乎要打印的相关代码是这样的(从这两个文件中提取
  • 如何同时将STDOUT和STDERR转到终端和日志文件?(How do I get both STDOUT and STDERR to go to the terminal and a log file?)
    问题 我有一个脚本,该脚本将由非技术用户交互运行。 该脚本将状态更新写入STDOUT,以便用户可以确保脚本运行正常。 我希望将STDOUT和STDERR都重定向到终端(以便用户可以看到脚本正在运行以及是否有问题)。 我还希望两个流都重定向到日志文件。 我在网上看到了很多解决方案。 有些不起作用,而另一些则非常复杂。 我已经开发了一个可行的解决方案(我将作为答案输入),但这很麻烦。 完美的解决方案是将一行代码合并到任何脚本的开头,该脚本会将两个流都发送到终端和日志文件。 编辑:将STDERR重定向到STDOUT并将结果通过管道传递到tee可以正常工作,但是这取决于记住要重定向并通过管道传递输出的用户。 我希望日志记录是万无一失的并且是自动的(这就是为什么我希望能够将解决方案嵌入脚本本身的原因。) 回答1 使用“ tee”重定向到文件和屏幕。 根据您使用的shell,首先必须使用以下命令将stderr重定向到stdout ./a.out 2>&1 | tee output 或者 ./a.out |& tee output 在csh中,有一个称为“脚本”的内置命令,它将捕获所有进入屏幕的文件。 您可以通过键入“脚本”来启动它,然后执行您想捕获的所有内容,然后按Control-D关闭脚本文件。 我不知道sh / bash / ksh的等效项。 另外
  • 如何在不获取nohup.out的情况下使用nohup命令?(How do I use the nohup command without getting nohup.out?)
    问题 我的nohup命令有问题。 当我完成工作时,我有很多数据。 输出nohup.out变得太大,并且我的进程变慢了。 如何在不获取nohup.out的情况下运行此命令? 回答1 如果输出否则将输出到终端,则nohup命令仅写入nohup.out 。 如果您已将命令的输出重定向到其他位置(包括/dev/null ),那么它将代替它。 nohup command >/dev/null 2>&1 # doesn't create nohup.out 如果您使用的是nohup ,则可能意味着您想通过在整个内容的最后加上另一个&在后台运行命令: nohup command >/dev/null 2>&1 & # runs in background, still doesn't create nohup.out 在Linux上,使用nohup运行作业也会自动关闭其输入。 在其他系统(尤其是BSD和macOS)上并非如此,因此在后台运行时,您可能需要手动关闭输入。 虽然关闭输入对nohup.out的创建或不起作用没有影响,但它避免了另一个问题:如果后台进程尝试从标准输入中读取任何内容,它将暂停,等待您将其放回前台并键入内容。 因此,超安全版本如下所示: nohup command </dev/null >/dev/null 2>&1 & # completely detached from
  • linux-将命令从一个终端写入另一终端(linux - write commands from one terminal to another)
    问题 我需要将命令从一个终端写入另一终端。 我尝试了这些: echo -e "ls\n" > /proc/pid/fd/0 echo -e "ls\n" > /dev/pts/4 只是将ls打印为输出,并且不执行。 我尝试了这些: chmod 777 /dev/tty4 ;echo "ls" > /dev/tty4 chmod 777 /dev/tty40 ;echo "ls" > /dev/tty40 哪个似乎什么都没做 有任何想法吗? [请注意,我不想触摸第二个终端来完成此操作。 只有第一个] 回答1 Python代码: #!/usr/bin/python import sys,os,fcntl,termios if len(sys.argv) != 3: sys.stderr.write("usage: ttyexec.py tty command\n") sys.exit(1) fd = os.open("/dev/" + sys.argv[1], os.O_RDWR) cmd=sys.argv[2] for i in range(len(cmd)): fcntl.ioctl(fd, termios.TIOCSTI, cmd[i]) fcntl.ioctl(fd, termios.TIOCSTI, '\n') os.close(fd) 回答2
  • Python子进程将孩子的输出输出到文件和终端?(Python subprocess get children's output to file and terminal?)
    问题 我正在运行一个脚本,该脚本通过使用执行许多可执行文件。 subprocess.call(cmdArgs,stdout=outf, stderr=errf) 当outf / errf为None或文件描述符( stdout / stderr的文件不同)时。 有什么方法可以执行每个exe,以便将stdout和stderr一起写入文件和终端? 回答1 call()函数只是Popen(* args,** kwargs).wait()。 您可以直接调用Popen并使用stdout=PIPE参数从p.stdout读取: #!/usr/bin/env python import sys from subprocess import Popen, PIPE from threading import Thread def tee(infile, *files): """Print `infile` to `files` in a separate thread.""" def fanout(infile, *files): with infile: for line in iter(infile.readline, b""): for f in files: f.write(line) t = Thread(target=fanout, args=(infile,) + files) t
  • 将stdout重定向到Python中的文件?(Redirect stdout to a file in Python?)
    问题 如何在Python中将stdout重定向到任意文件? 当从ssh会话中启动运行了长时间的Python脚本(例如,Web应用程序)并进行背景调整,并且ssh会话关闭时,该应用程序将引发IOError并在尝试写入stdout时失败。 我需要找到一种方法来使应用程序和模块输出到文件而不是stdout,以防止由于IOError而导致失败。 当前,我使用nohup将输出重定向到文件,并且可以完成工作,但是我想知道是否有一种出于好奇而无需使用nohup的方法。 我已经尝试过sys.stdout = open('somefile', 'w') ,但这似乎并不能阻止某些外部模块仍然输出到终端(或者sys.stdout = ...行未在全部)。 我知道它应该可以通过我测试过的简单脚本工作,但是我还没有时间在Web应用程序上进行测试。 回答1 如果要在Python脚本中进行重定向,则将sys.stdout设置为文件对象可以达到以下目的: import sys sys.stdout = open('file', 'w') print('test') sys.stdout.close() 一种更常见的方法是在执行时使用外壳重定向(与Windows和Linux相同): $ python foo.py > file 回答2 Python 3.4+中有contextlib.redirect_stdout(
  • Linux中记录终端(Terminal)输出到文本文件
    来源:cssiqi的专栏http://www.2cto.com/os/201307/224002.html  一,如何把命令运行的结果保存到文件当中?  这个问题太简单了,大家都知道,用 > 把输出转向就可以了  例子:  [lhd@hongdi ~]$ ls > ls.txt  [lhd@hongdi ~]$ cat ls.txt  1.gtkrc-2.0  2009  a  amsn_received  a.tar.gz  说明: > 是把输出转向到指定的文件,如文件已存在的话也会重新写入,文件原内容不会保留   >> 是把输出附向到文件的后面,文件原内容会保留下来 二,如何能在输出信息的同时把信息记录到文件中?  我们在上面的例子中可以看到,我们使用输出转向,命令在终端上的输出转向到了文件中,但如果我希望能同时在终端上看到输出信息怎么办?  我们可以使用这个命令: tee  解释一下tee的作用:  read from standard input and write to standard output and files  它从标准输入读取内容并将其写到标准输出和文件中  看例子:  [lhd@hongdi ~]$ ls | tee ls_tee.txt  1.gtkrc-2.0  2009  a  amsn_received  a.tar.gz  [lhd@hongdi
  • 如何执行python脚本并将输出写入txt文件?(How to execute a python script and write output to txt file?)
    问题 我正在执行一个.py文件,该文件吐出了一个给定字符串。 这个命令工作正常 execfile('file.py') 但是我希望将输出(除了在外壳中显示)写入文本文件中。 我试过了,但是不起作用:( execfile('file.py')>('output.txt') 我所得到的是这样的: tugsjs6555 错误的 我猜“ False”是指输出文件未成功写入:( 谢谢你的帮助 回答1 您所做的是对照字符串'output.txt'检查execfile('file.py')的输出 您可以使用子流程来完成您想做的事情 #!/usr/bin/env python import subprocess with open("output.txt", "w+") as output: subprocess.call(["python", "./script.py"], stdout=output); 回答2 由于在执行“ file.py”之前将标准定向到文件output.txt,所以这也将起作用: import sys orig = sys.stdout with open("output.txt", "wb") as f: sys.stdout = f try: execfile("file.py", {}) finally: sys.stdout = orig 或者,在子过程中执行脚本
  • 如何从Linux终端的所有单元中清除IPython Notebook的输出?(How to clear an IPython Notebook's output in all cells from the Linux terminal?)
    问题 当笔记本的输出确实很长并且将其保存到笔记本中时,我有一个问题,任何时候我想再次打开该特定笔记本时,浏览器都会崩溃并且无法正确显示。 要解决此问题,我必须使用文本编辑器将其打开,并删除导致该问题的该单元格中的所有输出。 我想知道是否有一种方法可以清除笔记本的所有输出,以便可以再次打开它而不会出现问题。 我想删除所有输出,因为删除特定输出似乎比较麻烦。 回答1 nbconvert 6.0应该修复--clear-output 该选项已被打破很长时间,合并了补丁的错误报告:https://github.com/jupyter/nbconvert/issues/822 用法应用于就地操作: jupyter nbconvert --clear-output --inplace my_notebook.ipynb 或保存到另一个名为my_notebook_no_out.ipynb文件中: jupyter nbconvert --clear-output \ --to notebook --output=my_notebook_no_out my_notebook.ipynb Harold在评论中引起了我的注意。 在nbconvert 6.0之前:-- --ClearOutputPreprocessor.enabled=True 与--clear-output相同的用法: jupyter
  • 如何导出Python内置的help()函数的输出(How do I export the output of Python's built-in help() function)
    问题 我有一个python软件包,可从以下命令输出大量帮助文本: help(package) 我想将此帮助文本以help(package)显示的格式导出到文件中 我该怎么办? 回答1 这有点骇人听闻(并且某处可能有更好的解决方案),但这是可行的: import sys import pydoc def output_help_to_file(filepath, request): f = open(filepath, 'w') sys.stdout = f pydoc.help(request) f.close() sys.stdout = sys.__stdout__ return 然后... >>> output_help_to_file(r'test.txt', 're') 回答2 pydoc.render_doc(thing)以字符串形式获取事物的帮助文本。 pydoc的其他部分(例如pydoc.text和pydoc.html)可以帮助您将其写入文件。 例如,在Linux中使用-w修饰符会将输出写入当前目录中的html。 pydoc -w Rpi.GPIO 将将从命令help(Rpi.GPIO)呈现的所有help()文本放入外壳程序当前目录中的格式良好的文件Rpi.GPIO.html中。 回答3 一个古老的问题,但是较新的推荐的通用解决方案(对于Python 3.4+)
  • 如何在控制台上获取OS X应用程序的输出或文件?(How to get the output of an OS X application on the console, or to a file?)
    问题 我正在编写具有Mono嵌入式功能的Cocoa应用程序。 我想运行并在终端中查看调试输出。 在可可方面,我使用NSLog() ,而在Mono方面,我使用Debug.Write() 。 我可以在Xcode的控制台中看到调试输出,但在Terminal中看不到。 这是我尝试的: $: open /path/build/Debug/MyProgram.app $: open /path/build/Debug/MyProgram.app > output $: open /path/build/Debug/MyProgram.app 2> output 在终端中,但我不在控制台或“输出”中输出。 什么是正确的命令? PS。 我的最终目标是编写一个vim插件来管理,构建,运行,调试xcode项目。 如果您可以让此vi输入管理器与xcode一起使用,则可以省去我的麻烦。 回答1 Chris很好地概述了控制台的工作原理,但是专门回答了您的问题:如果您想直接在终端中查看结果,则需要将构建的产品作为终端的子代来运行,这意味着要使用类似 /path/debug/build/MyProgram.app/Contents/MacOS/MyProgram 启动应用程序。 回答2 Mac OS X上的Terminal只是另一个应用程序。 像Windows一样
  • Golang 写入输入并从终端进程获取输出(Golang write input and get output from terminal process)
    问题 我有一个关于如何从终端子进程(如 ssh)发送输入和接收输出的问题。 python中的一个例子是这样的: 如何给子进程一个密码并同时获得标准输出 我在 Golang 中找不到与上述工作方式类似的简单示例。 在 Golang 中,我想做这样的事情,但它似乎不起作用: cmd := exec.Command("ssh", "user@x.x.x.x") cmd.Stdout = os.Stdout cmd.Stderr = os.Stderr stdin, _ := cmd.StdinPipe() stdin.Write([]byte("password\n")) cmd.Run() 然而; 我不确定如何在 go 中执行此操作,因为每次我执行此 ssh 命令时,我只能获得输出。 我无法从代码中自动输入我的密码。 有没有人有写终端进程的例子,比如 ssh? 如果是这样,请分享。 回答1 感谢上面的评论,我能够使用密码获得 ssh 访问权限。 我使用了 golang 的 ssh api 库。 当我遵循以下示例时,这相当简单: https://code.google.com/p/go/source/browse/ssh/example_test.go?repo=crypto 具体来说: func ExampleDial() { // An SSH client is
  • 使用python从子进程读取输出(Reading output from child process using python)
    问题 上下文 我正在使用subprocess模块从 python 启动一个进程。 我希望能够在写入/缓冲后立即访问输出(stdout、stderr)。 该解决方案必须支持 Windows 7。我也需要一个适用于 Unix 系统的解决方案,但我怀疑 Windows 的情况更难解决。 该解决方案应支持 Python 2.6。 我目前仅限于 Python 2.6,但仍然赞赏使用更高版本 Python 的解决方案。 该解决方案不应使用第三方库。 理想情况下,我会喜欢使用标准库的解决方案,但我愿意接受建议。 该解决方案必须适用于几乎任何流程。 假设对正在执行的进程没有控制。 子进程 例如,假设我要运行名为Python文件counter.py通过subprocess 。 counter.py的内容如下: import sys for index in range(10): # Write data to standard out. sys.stdout.write(str(index)) # Push buffered data to disk. sys.stdout.flush() 父进程 负责执行counter.py示例的父进程如下: import subprocess command = ['python', 'counter.py'] process = subprocess
  • 子流程命令的实时输出(live output from subprocess command)
    问题 我正在使用python脚本作为流体力学代码的驱动程序。 当需要运行模拟时,我使用subprocess.Popen运行代码,将stdout和stderr的输出收集到subprocess.PIPE ---然后,我可以打印(并保存到日志文件中)输出信息,并检查是否有任何错误。 问题是,我不知道代码是如何进行的。 如果我直接从命令行运行它,它会给我输出有关它在什么迭代,什么时间,下一个时间步长等的输出。 有没有办法既存储输出(用于日志记录和错误检查),又产生实时流输出? 我的代码的相关部分: ret_val = subprocess.Popen( run_command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True ) output, errors = ret_val.communicate() log_file.write(output) print output if( ret_val.returncode ): print "RUN failed\n\n%s\n\n" % (errors) success = False if( errors ): log_file.write("\n\n%s\n\n" % errors) 最初,我是通过tee run_command ,以便将副本直接发送到日志文件
  • 如何通过SELECT INTO OUTFILE解决MySQL Errcode 13?(How can I get around MySQL Errcode 13 with SELECT INTO OUTFILE?)
    问题 我正在尝试使用MySQL SELECT INTO OUTFILE语句将表的内容转储到csv文件中。 如果我做: SELECT column1, column2 INTO OUTFILE 'outfile.csv' FIELDS TERMINATED BY ',' FROM table_name; outfile.csv将在服务器上与数据库文件存储在同一目录中创建。 但是,当我将查询更改为: SELECT column1, column2 INTO OUTFILE '/data/outfile.csv' FIELDS TERMINATED BY ',' FROM table_name; 我得到: ERROR 1 (HY000): Can't create/write to file '/data/outfile.csv' (Errcode: 13) Errcode 13是一个权限错误,但是即使我将/ data的所有权更改为mysql:mysql并赋予它777权限,我也得到了它。 MySQL以用户“ mysql”的身份运行。 奇怪的是,即使在权限设置为使用户mysql应该能够写入目录的情况下,我也可以在/ tmp中创建该文件,但不能在我尝试过的任何其他目录中创建该文件。 这是在Ubuntu上运行的MySQL 5.0.75。 回答1 这是哪个特定的Ubuntu版本
  • 在Bash中重定向stderr和stdout(Redirect stderr and stdout in Bash)
    问题 我想将一个进程的stdout和stderr都重定向到一个文件。 我该如何在Bash中做到这一点? 回答1 在这里看看。 应该: yourcommand &>filename (将stdout和stderr都重定向到文件名)。 回答2 do_something 2>&1 | tee -a some_file 这将把stderr重定向到stdout,并将stdout重定向到some_file并将其打印到stdout。 回答3 您可以将stderr重定向到stdout,然后将stdout重定向到文件中: some_command >file.log 2>&1 参见http://tldp.org/LDP/abs/html/io-redirection.html 该格式比仅在bash中起作用的最受欢迎的&>格式更受青睐。 在Bourne Shell中,它可以解释为在后台运行命令。 同样,格式更易读2(是STDERR)重定向到1(STDOUT)。 编辑:更改顺序,如注释中指出 回答4 # Close STDOUT file descriptor exec 1<&- # Close STDERR FD exec 2<&- # Open STDOUT as $LOG_FILE file for read and write. exec 1<>$LOG_FILE # Redirect
  • 什么是/ dev / null 2>&1?(What is /dev/null 2>&1?)
    问题 我在/etc/cron.daily/apf中找到了这段代码 #!/bin/bash /etc/apf/apf -f >> /dev/null 2>&1 /etc/apf/apf -s >> /dev/null 2>&1 它正在刷新并重新加载防火墙。 我不理解>> /dev/null 2>&1部分。 在cron中进行此操作的目的是什么? 它覆盖了我的防火墙规则。 我可以安全地删除此Cron作业吗? 回答1 >> /dev/null将标准输出( stdout )重定向到/dev/null ,然后将其丢弃。 ( >>似乎是多余的,因为>>表示附加,而>表示截断并写入,并且附加到/dev/null或写入/dev/null具有相同的净效果。出于这个原因,我通常只使用> 。) 2>&1将标准错误( 2 )重定向到标准输出( 1 ),由于标准输出已被重定向,该错误也会被丢弃。 回答2 让我们将>> /dev/null 2>&1语句分成几部分: 第1部分: >>输出重定向 这用于重定向程序输出,并将输出附加在文件末尾。 更多的... 第2部分: /dev/null专用文件 这是一个伪设备专用文件。 命令ls -l /dev/null将为您提供此文件的详细信息: crw-rw-rw-. 1 root root 1, 3 Mar 20 18:37 /dev/null 你观察到crw吗?