我通常使用tee将程序保存到其他文件中,例如。
python -c "print('haha');" | tee -a /tmp/tmp.txt
但是,当程序需要从stdin中读取数据时,这就不起作用了
python -c "print('haha');import pdb; pdb.set_trace()" | tee -a /tmp/tmp.txt
程序将挂在那里而不打印任何内容。怎么处理?谢谢。。。
最佳答案
尝试:
python -c "print('haha');import pdb, sys; pdb.Pdb(stdout=sys.stderr).set_trace()" | tee -a /tmp/tmp.txt
或者,如果您在Linux上:
stdbuf -o0 python -c "print('haha');import pdb, sys; pdb.set_trace()" | tee -a /tmp/tmp.txt
在上面的第一种情况中,
pdb
被指示将其输出发送到stderr。这意味着它不会转到tee
而直接转到终端。在第二种情况下,
stdbuf
实用程序用于关闭输出缓冲。stdbuf
是GNU核心功能的一部分。改进版
当上面的代码运行时,pdb在其stdout不是tty时的行为不同。尤其是,它不支持pdb的所有交互式命令行功能,例如控制键。正如blueyed所指出的,
script
command能够克服这一点,使程序运行起来就好像它的stdout没有被重新定向一样:script -q -c 'python -c "import pdb, sys; pdb.set_trace()"' /dev/null | tee -a /tmp/tmp.txt
关于bash - 使用tee时如何输入到stdin,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38811297/