gpt4 book ai didi

python - 在通过管道读取标准输入的脚本中使用 pdb.set_trace()

转载 作者:IT老高 更新时间:2023-10-28 21:58:35 25 4
gpt4 key购买 nike

我有一个通过管道读取标准输入的 python 脚本,但我似乎无法将它与 pdb.set_trace() 一起使用。

my_script.py:

#!/usr/bin/env python
import sys
import pdb

def main():
for line in sys.stdin:
print "Printing a line: " +line

if __name__=='__main__':
status = main()

假设 tempfile.csv 是一个有两行的文件,

$ cat tempfile.csv 
line1
line2

然后我可以运行我的脚本:$ 猫临时文件.csv | ./my_script.py,一切都很好:

$ cat tempfile.csv | ./my_script.py 
Printing a line: line1

Printing a line: line2

另一方面,如果我将 pdb.set_trace() 放在任何地方,则会出现错误。例如,将 pdb.set_trace() 放在 def main() 下面,然后我得到

$ cat tempfile.csv | ./my_script.py 
> /home/ilangmore/mobiuss/TM/branches/hadooprotype/my_script.py(7)main()
-> for line in sys.stdin:
(Pdb) *** NameError: name 'line1' is not defined
(Pdb) *** NameError: name 'line2' is not defined
(Pdb)
Traceback (most recent call last):
File "./my_script.py", line 11, in <module>
status = main()
File "./my_script.py", line 7, in main
for line in sys.stdin:
File "./my_script.py", line 7, in main
for line in sys.stdin:
File "/usr/lib/python2.7/bdb.py", line 48, in trace_dispatch
return self.dispatch_line(frame)
File "/usr/lib/python2.7/bdb.py", line 67, in dispatch_line
if self.quitting: raise BdbQuit
bdb.BdbQuit

请注意,我的问题可能与 this question 有关(即 pdb 默认从标准输入读取),但我需要更多帮助。

最佳答案

这是一个对我有用的例子:

import sys
import pdb

lines = sys.stdin.readlines()
sys.stdin = open("/dev/tty")
pdb.set_trace()

编辑:从 3.7 开始,您不再需要为 set_trace 导入 pdb,它可以作为 breakpoint 使用,所以上面只需要一个 sys 导入。

import sys

lines = sys.stdin.readlines()
sys.stdin = open("/dev/tty")
breakpoint()

您可能希望将上面的 sys.stdin.readlines() 替换为可迭代的 fileinput.input()(defaultssys.stdin 如果 sys.argv[1:] 中的文件列表为空)像这样:

import fileinput
import sys

lines = fileinput.input()
sys.stdin = open("/dev/tty")
breakpoint()

关于python - 在通过管道读取标准输入的脚本中使用 pdb.set_trace(),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9178751/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com