python - 让 python 脚本打印到终端而不作为标准输出的一部分返回

标签 python stdout

我正在尝试编写一个返回值的 python 脚本,然后我可以将该值传递给 bash 脚本。事情是我想要在 bash 中返回一个单一的值,但我想要一些东西在这个过程中打印到终端。

这是一个示例脚本。我们称它为 return5.py:

#! /usr/bin/env python
print "hi"
sys.stdout.write(str(5))

我想要的是当我从命令行运行它时以这种方式执行:

~:five=`./return5.py`
hi
~:echo $five
5

但我得到的是:

~:five=`./return5.py`
~:echo $five
hi 5

换句话说,我不知道如何让 python 脚本打印并清除标准输出,然后将其分配给我想要的特定值。

最佳答案

不确定为什么@yorodm 建议不要使用 stderr。在这种情况下,这是我能想到的最佳选择。

请注意 print 会自动添加一个换行符,但是当您使用 sys.stderr.write 时,您需要自己添加一个 "\n ".

#! /usr/bin/env python
import sys


sys.stderr.write("This is an important message,")
sys.stderr.write(" but I dont want it to be considered")
sys.stderr.write(" part of the output. \n")
sys.stderr.write("It will be printed to the screen.\n")

# The following will be output.
print 5

使用此脚本如下所示:

bash$ five=`./return5.py`
This is an important message, but I dont want it to be considered part of the output.
It will be printed to the screen.
bash$ echo $five
5

之所以可行,是因为终端实际上​​向您显示了三个信息流:stdoutstdinstderr。 `cmd` 语法说“从这个过程中捕获 stdout”,但它不会影响 stderr 发生的事情。这完全是为您使用它的目的而设计的——传达有关错误、警告或过程中发生的事情的信息。

您可能没有意识到 stdin 也显示在终端中,因为它正是您键入时显示的内容。但它不必是那样的。您可以想象在终端中键入内容却什么也没有显示。事实上,这正是您输入密码时发生的情况。您仍在向 stdin 发送数据,但终端不显示它。

关于python - 让 python 脚本打印到终端而不作为标准输出的一部分返回,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23118252/

相关文章:

python - 如何运行一个本地主机,该主机可以一直提供服务,直到关键字将其停止为止(全部来自.py文件)?

python - Keras ImageDataGenerator apply_transform() 方法将图像向相反方向移动

c - 动态生成文件内容(穷人的proc文件)

perl - 为什么本地在 STDERR 和 STDOUT 上不起作用?

python - 如何为多个项目设置 PyCharm

python - 从 sys.path 中删除条目

python - 使用 for 循环构建 NumPy 数组(列表的列表?)

bash - 在 Bash 中重定向 stderr 和 stdout

c - 将标准输入重定向到标准输出

go - Go 的分页输出