gpt4 book ai didi

python - 程序输出既不是 STDOUT 也不是 STDERR?

转载 作者:行者123 更新时间:2023-12-01 06:02:26 24 4
gpt4 key购买 nike

当我 try catch django 的 manager.py 的输出时,我遇到了一些非常奇怪的行为

> ./manage.py runserver 0.0.0.0:2869
Validating models...

0 errors found
Django version 1.3.1, using settings 'polling.settings'
Development server is running at http://0.0.0.0:2869/
Quit the server with CONTROL-C.
Error: That port is already in use.

> ./manage.py runserver 0.0.0.0:2869 >stdout 2>stderr

> cat stderr
Error: That port is already in use.

> cat stdout

>

当我 try catch 第二次运行的输出时,为什么会得到空字符串?

最佳答案

任何程序都可以检测其 STDOUT 和/或 STDERR 是否连接到终端: man isatty(3) 。 Python也有这样的功能:sys.stdout.isatty()。

可能您的 python 脚本或其日志子系统仅在终端(即交互模式)上运行时才会打印第二次运行中缺少的行。这是一种常见且正确的做法。例如,如果输出重定向到日志文件,则打印 "Quit the server with CONTROL-C" 是没有意义的。

下面是一个简单的说明:

#!/usr/bin/python

import sys

print "Print always."
if sys.stdout.isatty():
print "Print only on tty!"

我们开始:

$ ./test.py 
Print always.
Print only on tty!
$ ./test.py > log
$ cat log
Print always.
$

关于python - 程序输出既不是 STDOUT 也不是 STDERR?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9631060/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com