阅读sys.stdin后的Python交互

时间:2015-02-11 19:32:08

标签: python parsing stdin python-interactive

我正在尝试编写一个从stdin读取的小图解析器,并将处理后的输出写入stdout的行:

# parser.py
G = defaultdict(list)
for line in sys.stdin:
    node, neighbor = line.split()
    G[node].append(neighbor)
print(G)

我想用python -i parser.py < data.txt调用脚本并与我创建的对象进行交互,但是即使我使用-i选项调用Python,解释器也会在代码运行后退出。注: ipython发生同样的事情;它甚至向我确认我真的想退出。&#34;

解决方法是编写代码以使用作为参数传入的特定文件,但我想知道是否有办法让Python不在上面的示例中退出解释器。

1 个答案:

答案 0 :(得分:3)

REPL(交互式控制台)在耗尽标准输入时退出。通常,标准输入是控制台,因此只有在您键入^ D或手动调用quit()时才会退出。但是如果从文件重定向stdin,当到达文件末尾时stdin将会耗尽。

您可以使用argparse在命令行上接受文件,默认为sys.stdin

parser = argparse.ArgumentParser()
parser.add_argument('input', type=argparse.FileType(), nargs='?', default=sys.stdin)
args = parser.parse_args()
G = defaultdict(list)
for line in args.input:
    ...