调试python时如何重定向标准输入?

时间:2012-06-19 09:57:18

标签: python debugging pdb

当我调试c代码时,我总是使用'​​gdb a.out< test'重定向标准输入流。但是当谈到pdb时,我发现它不起作用。在pdb帮助文档中搜索后,我仍然无法找到与此问题相关的内容。

编辑:我发布了我的代码。你可以帮我改变它,以最小的修改从文件中读取。感谢。

cnt = int(raw_input())
paths = []
for cs in range(cnt):
    action, path = map(None, (raw_input() + " dumb").split(" ", 1))
    if (action == "pwd"):
        print "/",
        for p in paths:
            print p + "/",
        print
    else:
        strs = path.split("/")
        for i in range(len(strs)):
            p = strs[i]
            if (p == ""): 
                continue
            if (p == ".."):
                paths.pop()
            else:
                paths.append(p)

3 个答案:

答案 0 :(得分:1)

更改程序以从命令行中指定的文件中读取测试数据。

答案 1 :(得分:0)

确定。我找到了解决方案。所以我只需要评论并取消注释这两行file,以切换stdin来自的方式。

import pdb
import sys

file = sys.stdin
#file = open('test', "r")

cnt = int(file.readline())
paths = []
for cs in range(cnt):
    inputs = file.readline().split()
    action  = inputs[0]
    if (action == "pwd"):
        sb = "/"
        for p in paths:
            sb = sb + p + "/"
        print sb
    else:
        path = inputs[1]
        strs = path.split("/")
        for i in range(len(strs)):
            p = strs[i]
            if (p == ""): 
                continue
            if (i == 1 and strs[0] == ""):
                paths = []
                paths.append(p)
                continue
            if (p == ".."):
                paths.pop()
            else:
                paths.append(p)

答案 2 :(得分:0)

作为一个丑陋的临时黑客,你可以重新定义raw_input()(Python 2)或input()(Python 3)来读取这样的文件(对于Python 2,用{{1替换input }})

raw_input