【问题标题】:debugging a python script taking input from sys.stdin in pycharm调试从 pycharm 中的 sys.stdin 获取输入的 python 脚本
【发布时间】:2017-05-28 23:13:25
【问题描述】:

我想调试一个从标准输入获取输入并将其发送到标准输出的小型 python 脚本。像这样使用:

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() 现在将打开的文件对象作为参数写入。这允许向后兼容,因此可以像上面一样使用它,同时我也可以在调试器下使用来自文件的输入来调用它。

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

【问题讨论】:

    标签: python-3.x debugging pycharm stdin


    【解决方案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)
    

    【讨论】:

    • 我假设前面的内容在与def filter(file): 定义合并时需要if __name__ == '__main__': 位(我的示例中也没有显示filter() def)。
    • 是的,您可以将上面的代码嵌套在if __name__ == '__main__' 块下,这样它只在作为脚本调用时运行,而不是作为模块导入时运行。
    猜你喜欢
    • 1970-01-01
    • 2014-03-14
    • 2014-11-21
    • 1970-01-01
    • 2012-02-24
    • 2020-09-21
    • 2014-08-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多