我想调试一个小的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()现在将文件对象打开以作为参数写入。这允许向后兼容,因此它可以像上面一样使用,而我也可以使用文件输入在调试器下调用它。
我认为这是一个丑陋的解决方案。有更清洁的选择吗?也许某些东西会将丑陋留在一个单独的文件中?
答案 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)