来自维基百科:
在计算机编程中,标准流是计算机程序与其环境开始执行时预先连接的输入和输出通信通道。三个I / O连接称为标准输入(stdin),标准输出(stdout)和标准错误(stderr)。最初I / O通过物理连接的系统控制台(通过键盘输入,通过监视器输出)发生,但标准流抽象了这一点。“
正如我从wiki所理解的那样,Stdin传统上是键盘,stdout是监视器(输出)。但今天,由于大多数现代计算机使用GUI,这些是什么。例如,如果我打开Linux Shell的cmd.exe或其他什么,我用这个命令运行Python:
# In cmd.exe
>>> import sys
>>> sys.stdout
<open file '<stdout>', mode 'w' at 0x000000000224B0C0>
A)我注意到sys.stdout
是内存中的文件(对象),它只是Python解释器创建的对象吗?或sys.stdout
物理存储在硬盘驱动器或任何存储方式中?
B)我认为cmd.exe是一个Win32应用程序,所以它有stdin,stdout或stderr,如果是这样,它们在哪里?它们只是存储在内存中吗?
答案 0 :(得分:3)
出于某种原因,它们被称为流而不是文件:它们代表数据的来源或汇。有时发送到流的数据存储在磁盘中的文件中,但有时数据只是由另一个程序接收。
例如,将两个命令组合在一起时:
$ ls | sort
第一个命令的标准输出连接到第二个命令的标准输入。
关于标准流在简单shell中的连接位置,标准流连接到虚拟终端程序。在linux中,它将是程序shell(xterm,gnome-terminal,kdeterminal ......)。在Windows中,它将是控制台管理器,由OS模块直接创建(通常为csrss.exe
,但Windows版本之间的细节不同)。
然后,当您写入标准输出时,屏幕上会显示书写字符,当您从标准输入读取时,终端会等待键盘输入。
答案 1 :(得分:0)
Python中的file
是文件描述符的抽象,它只是处理文件和流的一种低级方式(以及* nix上的其他内容)。绝不意味着磁盘上有任何东西。
此外,Windows应用程序默认情况下不提供标准流;应用程序必须明确打开它们才能使它们可用。