当前位置:首页 > Python > 正文

Python实现Shell逐行输入的完整指南 | Python命令行输入教程

Python中Shell逐行输入的实现方法

在Python编程中,经常需要从Shell或命令行逐行读取用户输入。本文将详细介绍三种主要方法:使用sys.stdinfileinput模块和内置input()函数,并提供实际代码示例。

方法一:使用sys.stdin

sys.stdin是Python标准输入流,可以像文件一样逐行读取输入。

基础用法

import sys

print("请输入内容(按Ctrl+D结束输入):")
for line in sys.stdin:
    print(f"已输入: {line.strip()}")

处理EOF(文件结束符)

import sys

lines = []
try:
    while True:
        line = sys.stdin.readline()
        if not line:  # 遇到EOF
            break
        lines.append(line.strip())
except KeyboardInterrupt:
    print("\n输入中断")

print("输入的所有行:", lines)

使用场景

  • 从管道接收输入:cat file.txt | python script.py
  • 处理多行输入直到EOF
  • 需要细粒度控制输入处理

方法二:使用fileinput模块

fileinput模块简化了从多个输入源读取行的过程,包括标准输入和文件。

基础用法

import fileinput

print("请输入内容(按Ctrl+D结束输入):")
for line in fileinput.input():
    print(f"处理行 #{fileinput.lineno()}: {line.strip()}")

处理命令行参数

import fileinput

with fileinput.input(files=('file1.txt', 'file2.txt')) as f:
    for line in f:
        print(f"{fileinput.filename()} 第{fileinput.filelineno()}行: {line.strip()}")

优点

  • 自动处理多个输入源
  • 提供额外的元数据(文件名、行号)
  • 支持原地文件编辑
  • 简洁的API

方法三:使用内置input()函数

Python的内置input()函数是最简单的逐行输入方法。

基础用法

print("请输入您的姓名:")
name = input()
print(f"你好, {name}!")

# 带提示的单行版本
age = input("请输入您的年龄: ")
print(f"年龄: {age}")

读取多行直到特定输入

lines = []
print("请输入多行内容,输入'END'结束:")

while True:
    line = input()
    if line == "END":
        break
    lines.append(line)

print("\n您输入的内容:")
for i, line in enumerate(lines, 1):
    print(f"{i}. {line}")

注意事项

  • 每次调用input()读取一行
  • 会阻塞程序执行等待用户输入
  • 支持可选的提示字符串参数
  • 在读取到EOF时引发EOFError

方法对比与选择指南

方法 优点 缺点 适用场景
sys.stdin 灵活、高效、支持管道输入 需要手动处理EOF 脚本处理管道数据
fileinput 自动处理多个输入源,提供元数据 API稍复杂 处理文件或标准输入
input() 简单易用,支持提示信息 不适合处理管道输入 交互式命令行程序

选择建议

  • 对于交互式程序,使用input()
  • 处理管道输入或重定向时,使用sys.stdin
  • 需要同时处理文件和标准输入时,使用fileinput
  • 需要逐行处理大文件时,优先使用sys.stdinfileinput

总结

Python提供了多种灵活的方式来实现Shell逐行输入:

  1. 使用sys.stdin进行底层控制
  2. 使用fileinput模块处理多个输入源
  3. 使用内置input()函数进行简单交互

根据具体需求选择合适的方法,可以高效地处理命令行输入,构建强大的Python脚本工具。

发表评论