繁体   English   中英

让python脚本打印到终端而不作为stdout的一部分返回

[英]getting python script to print to terminal without returning as part of 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发送数据,但终端未显示它。

从我的评论..

#!/usr/bin/env python
#foo.py 

import sys
print "hi"
sys.exit(5)

然后输出

[~] ./foo.py
hi
[~] FIVE=$?
[~] echo $FIVE
5

您可以使用stdout输出消息,使用stderr捕获bash中的值。 不幸的是,这是一些奇怪的行为,因为stderr旨在让程序传递错误消息,因此我强烈建议您反对它。

OTOH你总是可以用bash处理你的脚本输出

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM