python 如何获得重定向输入

发布时间 - 2026-01-08 00:00:00    点击率:
Python中获取重定向输入本质是读取sys.stdin,当命令行重定向时(如python script.py

Python 中获取重定向输入,本质是读取标准输入(sys.stdin),它在命令行中被重定向时(如 python script.py )会自动从文件读取,无需额外配置。

使用 sys.stdin 读取重定向输入

这是最直接、最常用的方式。当程序通过 重定向输入时,sys.stdin 就指向那个输入源(文件或管道),你可以像读文件一样操作它:

  • sys.stdin.read() 一次性读取全部内容(适合小到中等输入)
  • sys.stdin.readline() 逐行读取(内存友好,推荐用于大输入或未知长度)
  • for line in sys.stdin: 迭代读取(简洁、Pythonic)

兼容键盘输入和重定向输入

如果希望脚本既能处理重定向输入(python a.py ),也能交互式地从键盘输入(python a.py),可以检测 sys.stdin.isatty()

  • True 表示连接的是终端(键盘输入)
  • False 表示已被重定向(来自文件/管道)

例如:

  import sys
  if not sys.stdin.isatty():
    data = sys.stdin.read().strip()
  else:
    data = input("请输入:")

注意缓冲与换行符

重定向输入时,sys.stdin 默认是行缓冲(终端下)或全缓冲(重定向时),但对用户代码透明;真正需留意的是换行符:

  • readline() 和迭代方式都会保留每行末尾的 \n,通常需要 .strip().rstrip('\n')
  • input() 在交互模式下自动去掉末尾换行,但在重定向时不可用(会抛 EOFError

替代方案:用 argparse 显式接收文件路径

如果你更倾向显式控制输入来源(而非依赖 shell 重定向),可用 argparse 接收文件名参数,并打开读取:

  import argparse
  parser = argparse.ArgumentParser()
  parser.add_argument('file', nargs='?', type=argparse.FileType('r'), default=sys.stdin)
  args = parser.parse_args()
  for line in args.file: ...

这样既支持 python a.py input.txt,也支持 python a.py (此时 default=sys.stdin 生效)。


# python 


相关栏目: 【 网站优化151355 】 【 网络推广146373 】 【 网络技术251813 】 【 AI营销90571


相关推荐: 如何在万网开始建站?分步指南解析  阿里云高弹*务器配置方案|支持分布式架构与多节点部署  Windows家庭版如何开启组策略(gpedit.msc)?(安装方法)  Laravel Eloquent模型如何创建_Laravel ORM基础之Model创建与使用教程  想要更高端的建设网站,这些原则一定要坚持!  Laravel如何集成Inertia.js与Vue/React?(安装配置)  免费网站制作appp,免费制作app哪个平台好?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  Win11怎样安装网易有道词典_Win11安装词典教程【步骤】  武汉网站设计制作公司,武汉有哪些比较大的同城网站或论坛,就是里面都是武汉人的?  简单实现Android验证码  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  Laravel控制器是什么_Laravel MVC架构中Controller的作用与实践  如何在搬瓦工VPS快速搭建网站?  如何为不同团队 ID 动态生成多个“认领值班”按钮  北京专业网站制作设计师招聘,北京白云观官方网站?  活动邀请函制作网站有哪些,活动邀请函文案?  软银砸40亿美元收购DigitalBridge 强化AI资料中心布局  laravel怎么为API路由添加签名中间件保护_laravel API路由签名中间件保护方法  如何基于PHP生成高效IDC网络公司建站源码?  图册素材网站设计制作软件,图册的导出方式有几种?  标题:Vue + Vuex 项目中正确使用 JWT 进行身份认证的实践指南  Laravel如何编写单元测试和功能测试?(PHPUnit示例)  nginx修改上传文件大小限制的方法  Win11怎么设置虚拟桌面 Win11新建多桌面切换操作【技巧】  三星网站视频制作教程下载,三星w23网页如何全屏?  如何获取上海专业网站定制建站电话?  Laravel怎么处理异常_Laravel自定义异常处理与错误页面教程  如何快速打造个性化非模板自助建站?  Laravel安装步骤详细教程_Laravel环境搭建指南  微信小程序 canvas开发实例及注意事项  JavaScript如何实现路由_前端路由原理是什么  网站视频制作书签怎么做,ie浏览器怎么将网站固定在书签工具栏?  Laravel如何实现密码重置功能_Laravel密码找回与重置流程  PHP 实现电台节目表的智能时间匹配与今日/明日轮播逻辑  长沙企业网站制作哪家好,长沙水业集团官方网站?  lovemo网页版地址 lovemo官网手机登录  php增删改查怎么学_零基础入门php数据库操作必知基础【教程】  JavaScript常见的五种数组去重的方式  Laravel如何使用Gate和Policy进行权限控制_Laravel权限判定与策略规则配置  Laravel如何生成API文档?(Swagger/OpenAPI教程)  Laravel distinct去重查询_Laravel Eloquent去重方法  如何用wdcp快速搭建高效网站?  如何在企业微信快速生成手机电脑官网?  如何在腾讯云服务器上快速搭建个人网站?  Laravel如何发送系统通知_Laravel Notifications实现多渠道消息通知  Laravel怎么在Controller之外的地方验证数据  Laravel怎么设置路由分组Prefix_Laravel多级路由嵌套与命名空间隔离【步骤】  Swift中循环语句中的转移语句 break 和 continue  矢量图网站制作软件,用千图网的一张矢量图做公司app首页,该网站并未说明版权等问题,这样做算不算侵权?应该如何解决?