调用类似ag
(grep
替代方案)的程序会产生人类可读的输出。结果会打印标题。对人类有用,但对程序来说很糟糕。
$ ag 'filter\('
tests/string_lookup/tests.py
75: self.assertSequenceEqual(Article.objects.filter(submitted_from__contains='192.0.2'), [a])
77: self.assertEqual(Article.objects.filter(submitted_from__contains='32').count(), 0)
tests/test_runner/test_debug_sql.py
16: Person.objects.filter(first_name='pass').count()
20: Person.objects.filter(first_name='fail').count()
同一程序,通过管道传输到其他程序,输出:
$ ag 'filter\(' | cat
tests/string_lookup/tests.py:75: self.assertSequenceEqual(Article.objects.filter(submitted_from__contains='192.0.2'), [a])
tests/string_lookup/tests.py:77: self.assertEqual(Article.objects.filter(submitted_from__contains='32').count(), 0)
tests/test_runner/test_debug_sql.py:16: Person.objects.filter(first_name='pass').count()
tests/test_runner/test_debug_sql.py:20: Person.objects.filter(first_name='fail').count()
该输出更适合其他程序使用,因此我认为它ag
知道它正在被管道传输。
如何ag
知道它的输出被发送到哪里?
答案1
程序调用isatty()
stdout 文件描述符(即1
)。如果函数返回 true,则输出连接到 tty 设备(终端)。