Weibw's World Weibw's World
首页
  • HTML
  • Python

    • Python基础知识
    • Python CookBook第三版
    • Flask
  • MySQL

    • MySQL基础知识
    • MySQL调优
    • MySQL面试题
算法
  • FineReport
  • Kettle
  • Git
  • 微信公众号文章
  • 优秀博客文章
  • 其他
收藏夹
  • 分类
  • 标签
  • 归档
GitHub (opens new window)

Weibw

一个没有梦想的咸鱼
首页
  • HTML
  • Python

    • Python基础知识
    • Python CookBook第三版
    • Flask
  • MySQL

    • MySQL基础知识
    • MySQL调优
    • MySQL面试题
算法
  • FineReport
  • Kettle
  • Git
  • 微信公众号文章
  • 优秀博客文章
  • 其他
收藏夹
  • 分类
  • 标签
  • 归档
GitHub (opens new window)
  • 《Flask》

  • 《Python Cookbook》第三版

    • 第一章:数据结构与算法

    • 第二章:字符串和文本

    • 第三章:数字日期和时间

    • 第四章:迭代器与生成器

    • 第五章:文件与IO

    • 第六章:数据编码和处理

    • 第七章:函数

    • 第八章:类与对象

    • 第九章:元编程

    • 第十章:模块与包

    • 第十一章:网络与Web编程

    • 第十二章:并发编程

    • 第十三章:脚本编程与系统管理

      • 通过重定向-管道-文件接受输入
        • 问题
        • 解决方案
        • 讨论
      • 终止程序并给出错误信息
      • 解析命令行选项
      • 运行时弹出密码输入提示
      • 获取终端的大小
      • 执行外部命令并获取它的输出
      • 复制或者移动文件和目录
      • 创建和解压归档文件
      • 通过文件名查找文件
      • 读取配置文件
      • 给简单脚本增加日志功能
      • 给函数库增加日志功能
      • 实现一个计时器
      • 限制内存和CPU的使用量
      • 启动一个WEB浏览器
    • 第十四章:测试、调试和异常

    • 第十五章:C语言扩展

  • Python基础

  • Python
  • 《Python Cookbook》第三版
  • 第十三章:脚本编程与系统管理
weibw
2022-01-18

通过重定向-管道-文件接受输入

# 问题

你希望你的脚本接受任何用户认为最简单的输入方式。包括将命令行的输出通过管道传递给该脚本、 重定向文件到该脚本,或在命令行中传递一个文件名或文件名列表给该脚本。

# 解决方案

Python内置的 fileinput 模块让这个变得简单。如果你有一个下面这样的脚本:

#!/usr/bin/env python3
import fileinput

with fileinput.input() as f_input:
    for line in f_input:
        print(line, end='')
1
2
3
4
5
6

那么你就能以前面提到的所有方式来为此脚本提供输入。假设你将此脚本保存为 filein.py 并将其变为可执行文件, 那么你可以像下面这样调用它,得到期望的输出:

$ ls | ./filein.py          # Prints a directory listing to stdout.
$ ./filein.py /etc/passwd   # Reads /etc/passwd to stdout.
$ ./filein.py < /etc/passwd # Reads /etc/passwd to stdout.
1
2
3

# 讨论

fileinput.input() 创建并返回一个 FileInput 类的实例。 该实例除了拥有一些有用的帮助方法外,它还可被当做一个上下文管理器使用。 因此,整合起来,如果我们要写一个打印多个文件输出的脚本,那么我们需要在输出中包含文件名和行号,如下所示:

>>> import fileinput
>>> with fileinput.input('/etc/passwd') as f:
>>>     for line in f:
...         print(f.filename(), f.lineno(), line, end='')
...
/etc/passwd 1 ##
/etc/passwd 2 # User Database
/etc/passwd 3 #

<other output omitted>
1
2
3
4
5
6
7
8
9
10

通过将它作为一个上下文管理器使用,可以确保它不再使用时文件能自动关闭, 而且我们在之后还演示了 FileInput 的一些有用的帮助方法来获取输出中的一些其他信息。

编辑 (opens new window)
上次更新: 2023/10/13, 17:39:25
在Unix系统上面启动守护进程
终止程序并给出错误信息

← 在Unix系统上面启动守护进程 终止程序并给出错误信息→

最近更新
01
牛客网非技术快速入门SQL练习题
03-08
02
其他日常SQL题
03-07
03
用户与权限管理
03-05
更多文章>
Theme by Vdoing | Copyright © 2021-2023 | Weibw | 辽ICP备18015889号
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式