Tengo un script de python que lee stdin a través de un conducto, y no puedo usarlo con pdb.set_trace().Use pdb.set_trace() en un script que lea stdin a través de un conducto
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 Supongamos que algún archivo con dos líneas,
$ cat tempfile.csv
line1
line2
entonces puedo ejecutar mi script con: $ tempfile.csv gato | ./my_script.py, y todo está bien:
$ cat tempfile.csv | ./my_script.py
Printing a line: line1
Printing a line: line2
Por otro lado, si pongo pdb.set_trace() en cualquier lugar y luego me sale un error. Por ejemplo, poner pdb.set_trace() por debajo principal def(), entonces consigo
$ 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
Tenga en cuenta que mi pregunta está probablemente relacionado con this question (es decir pdb por defecto lee de la entrada estándar), pero necesito más ayuda.
Esto parece ayudar pero no completamente. Puse sys.stdin.read() en algunos lugares, y pdb.set_trace() a continuación, y ya no obtengo el NameError. Sin embargo, pdb no se abre ... simplemente sale (el mismo mensaje que el anterior, sin NameError) –