stdout stdin python里面的标准输出和输入

本文介绍了Python中如何使用sys模块的stdout和stdin进行输入输出操作。详细解释了sys.stdout.write和sys.stdin.readline的功能及用法,并对比了它们与print的区别。
Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本


使用stdout 以及stdin时,需要导入from sys import stdout  ,from sys import stdin

stdout相当于print,有一点区别就是sys.stdout.write('')这个默认是没有换行的 需要自己添加sys.stdout.write(' '+'\n')这个语句就类似于print ‘’输出语句。

在python3.5里面默认是print后面加输出换行,试过在输出后面加逗号,但是python3.5还是自动换行,也试过在python3.5 内置函数中修改内建函数print的参数值值,但是没效果,直接使用这种标准输出就可以直接将所要显示的东西放到一行,比较简单。


sys.stdin.readline()每次读入一行

您可能感兴趣的与本文相关的镜像

Python3.9

Python3.9

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

Python 中,标准输入stdin标准输出stdout)是程序与外部环境进行交互的基本方式。它们通常用于从终端读取输入或向终端输出结果,但也可以通过重定向与文件或其他进程进行通信。 标准输入stdin)默认连接到用户的键盘,而标准输出stdout)默认连接到用户的终端屏幕。在实际应用中,可以通过 `sys.stdin` `sys.stdout` 来访问这些流[^1]。例如,使用 `sys.stdin.readline()` 可以读取一行输入,而 `sys.stdout.write()` 则可以写入输出到终端。 当涉及到子进程时,Python 提供了 `subprocess` 模块来创建管理这些进程。通过 `subprocess.Popen` 类,可以指定子进程的标准输入、输出以及错误流的目标。比如,可以将它们设置为管道(`subprocess.PIPE`),这样就可以在父进程中读取子进程的输出或者向子进程中写入输入[^2]。 对于非阻塞地读取子进程的输出,一种方法是利用 `select` 模块中的 `select` 函数来检测是否有数据可读。这允许程序在等待 I/O 操作完成时不阻塞主线程,从而实现异步处理。下面是一个简单的例子,演示了如何使用 `select` 来异步读取 `Popen` 对象的 stdout: ```python import subprocess import select import sys def async_read_stdout(): # 启动一个子进程,并将 stdout 设置为管道 process = subprocess.Popen( ["your_command", "your_arg"], # 替换为你想要执行的命令 stdout=subprocess.PIPE, stderr=subprocess.STDOUT, universal_newlines=True # 确保输出为文本模式 ) while True: # 使用 select 来检查 stdout 是否有数据可读 reads, _, _ = select.select([process.stdout], [], []) for fd in reads: if fd == process.stdout: line = fd.readline() if not line: # 如果没有更多数据,则退出循环 break print(line.strip()) # 处理每一行输出 # 如果子进程已经结束,则退出循环 if process.poll() is not None: break # 确保子进程被正确清理 process.wait() # 调用函数 async_read_stdout() ``` 在这个例子中,`select.select` 被用来监视 `process.stdout` 文件描述符,当它变得可读时,就尝试读取一行数据。这种方法非常适合需要同时处理多个 I/O 流的情况,因为它可以在单个线程内高效地管理多个文件描述符的状态变化。 此外,如果希望以更加现代的方式处理异步 I/O,Python 3.4+ 引入的 `asyncio` 库提供了一个事件驱动的框架,它支持异步编程模型,包括异步读写子进程的流。这种方式更适合构建高并发的应用程序。 需要注意的是,在某些操作系统上,特别是 Windows,可能需要额外的配置或使用不同的方法来确保非阻塞 I/O 正常工作,因为 `select` 模块并不支持所有类型的文件描述符。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值