Командная строка Python 'поток ввода файла' - PullRequest
9 голосов
/ 20 июня 2011

Я довольно новичок в Python, пришедшем из C / C ++, мне было интересно, как я мог бы получить мой main.py для преобразования / использования импульса, полученного из оболочки bash, как:

python main.py

(файл в текстовом формате)

Ответы [ 3 ]

8 голосов
/ 20 июня 2011

Чтение из sys.stdin:

import sys
sys.stdin.read()

Будучи файловым объектом , вы можете использовать его функции чтения или просто перебирать строки ввода:

for line in sys.stdin:
    print line
6 голосов
/ 20 июня 2011

Использование модуля fileinput было бы наиболее подходящим и более гибким.

http://docs.python.org/library/fileinput.html

import fileinput
for line in fileinput.input():
    process(line)

Помимо поддержки стандартного ввода, он также может читать файлы, перечисленные в качестве аргументов.

2 голосов
/ 20 июня 2011

Я бы использовал argparse для создания анализатора параметров, который принимает путь к файлу и открывает его.

import argparse

def main():
    parser = argparse.ArgumentParser()
    parser.add_argument('infile', type='open')
    args = parser.parse_args()

    for line in args.infile:
        print line

if __name__ == '__main__':
    main()

Если type='open' не обеспечивает достаточного контроля, его можно заменитьс argparse.FileType('o'), который принимает bufsize и mode args (см. http://docs.python.org/dev/library/argparse.html#type)

РЕДАКТИРОВАТЬ: Моя ошибка. Это не поддержит ваш вариант использования.Это позволит вам указать путь к файлу, но не направлять содержимое файла в процесс. Я оставлю этот ответ здесь, так как он может быть полезен в качестве альтернативы.

...