调试python脚本从pycharm中的sys.stdin获取输入

时间:2017-01-13 14:37:58

标签: python-3.x debugging pycharm stdin

我想调试一个小的python脚本,它从stdin获取输入并将其发送到stdout。像这样使用:

filter.py < in.txt > out.txt

似乎没有办法将Pycharm调试配置为来自我的测试数据文件的管道输入。

之前已经问过这个问题,答案是,基本上“你不能 - 重写脚本以从文件中读取。”

我修改了代码以获取文件,或多或少地将代码大小加倍,使用:

import argparse

if __name__ == '__main__':
    cmd_parser = argparse.ArgumentParser()
    cmd_parser.add_argument('path', nargs='?', default='/dev/stdin')
    args = cmd_parser.parse_args()
    with open(in_path) as f:
        filter(f)

其中filter()现在将文件对象打开以作为参数写入。这允许向后兼容,因此它可以像上面一样使用,而我也可以使用文件输入在调试器下调用它。

我认为这是一个丑陋的解决方案。有更清洁的选择吗?也许某些东西会将丑陋留在一个单独的文件中?

1 个答案:

答案 0 :(得分:1)

如果你想要更简单的东西,你可以完全放弃argparse,只需使用sys.argv列表来获得第一个参数。

import sys

if len(sys.argv) > 1:
    filename = sys.argv[1]
else:
    filename = sys.stdin

with open(filename) as f:
    filter(f)