我通常使用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/

10-14 06:35