对于一个小项目,我决定第一次给Python。 我让我的代码工作正常,但在处理python脚本的输出时,我注意到了一些奇怪的行为。
似乎所使用的终端设置会影响python的打印功能输出。
以下是我的代码的简化版本:
#!/usr/bin/python
print 'one two'
正常输出正如您所期望的那样:
~/$test.py
one two
~/$
但是如果你尝试让bash读取输出,它就会失败。 以下是我如何复制问题:
~/$ set -x
~/$ ./test.py | while read V1 V2; do echo $V1; echo $V2; grep -c "$V1" /myfile; done
+ ./test.py
+ read V1 V2
+ echo 'one'
one
+ echo two
two
+ grep -c 'one' /etc/passwd
grep: Unmatched [ or [^
+ read V1 V2
~/$ set +x
注意'one'周围的单引号? grep抱怨的'[''在哪里? 当我将输出重定向到文件,并将其加载到vi中时,我在输出前面看到了一些控制字符。
要解决此问题,请按以下方式运行命令:
~/$ (TERM=dumb; ./test.py | while read V1 V2; do echo $V1; echo $V2; grep -c "$V1" /myfile; done)
这很好用,但我真的很想知道为什么python决定它需要格式化终端的输出。更重要的是,我该如何控制这种行为?
感谢您的时间。