我有一个通过管道读取标准输入的 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
然后我可以运行我的脚本:
$ cat tempfile.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
请注意,我的问题可能与这个问题 https://stackoverflow.com/questions/3101777/run-pdb-without-stdin-stdout-using-fifo(即 pdb 默认从 stdin 读取),但我需要更多帮助。