2011-06-20 47 views
9

Tôi khá mới với python đến từ C/C++, tôi đã tự hỏi làm thế nào tôi sẽ nhận được 'main.py' của tôi để reconise/sử dụng imput được đưa ra từ một bash shell như:Dòng lệnh Python 'dòng đầu vào tập tin'

python main.py < text.txt

(các tập tin là dạng plain text)

Trả lời

2

Tôi sẽ sử dụng argparse để tạo ra một phân tích cú pháp lựa chọn chấp nhận một đường dẫn tập tin và mở nó.

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() 

Nếu type='open' không cung cấp đủ kiểm soát, nó có thể được thay thế bằng argparse.FileType('o') mà chấp nhận bufsizemode args (xem http://docs.python.org/dev/library/argparse.html#type)

EDIT: Sai lầm của tôi. Điều này sẽ không hỗ trợ trường hợp sử dụng của bạn. Điều này sẽ cho phép bạn cung cấp một filepath, nhưng không cho phép nội dung tập tin vào trong tiến trình. Tôi sẽ để lại câu trả lời ở đây vì nó có thể hữu ích như một sự thay thế.

8

đọc từ sys.stdin:

import sys 
sys.stdin.read() 

Là một file-like object, bạn có thể sử dụng chức năng đọc của mình hoặc đơn giản là lặp qua các dòng đầu vào:

for line in sys.stdin: 
    print line 
+0

@walter sử dụng 'line = line.rstrip()'. – Keith

6

Sử dụng mô-đun fileinput sẽ phù hợp nhất ở đây và linh hoạt hơn.

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

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

Ngoài việc hỗ trợ stdin, nó cũng có thể đọc từ các tập tin được liệt kê như các đối số.

+0

+1 cho điều này. Tôi đã không nghe nói về nó. Tốt đẹp. –

Các vấn đề liên quan