# fileinput

# 概述

python内置的fileinput​模块可以处理linux命令行的管道、重定向、参数传递等行为。

例如:

#!/usr/bin/env python3
import fileinput

with fileinput.input() as f_input:
    for line in f_input:
        print(line, end='')

则下面三种方式都是可行的:

$ 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.

# 上下文管理器

实质上fileinput.input()​将创建并返回一个FileInput​类的实例,我们可以尝试传入参数,并且其本身支持上下文管理。

>>> import fileinput
>>> with fileinput.input('/home/lei/scripts/docker_installer.sh') as f:
...     for line in f:
...             print(f.filename(),f.lineno(),line,end='')
...
/home/lei/scripts/docker_installer.sh 1 curl -fsSL https://get.docker.com -o get-docker.sh
/home/lei/scripts/docker_installer.sh 2 sudo sh get-docker.sh
/home/lei/scripts/docker_installer.sh 3 sudo usermod -aG docker $USER