【问题标题】:What is the equivalent of Perl's 'print STDERR' in Python? [duplicate]什么是 Python 中 Perl 的“打印 STDERR”的等价物? [复制]
【发布时间】:2016-02-08 20:37:25
【问题描述】:

我正在尝试重写一个同事制作的 Perl 脚本,让您可以为目录添加书签。

它的工作方式是在文件夹中输入go add dir,然后在终端的其他任何地方输入go dir,然后您将转到书签目录。

据我所知,go 是一个 bash 函数,它使用以下代码调用 perl 脚本:cd (godir)。似乎要打印除目录以外的任何内容,它都会打印 STDERR。当我在 python 中使用 sys.stderr.write() 时,它会打印出文本,但也会打印出cd: The directory 'None' does not exist

这是一个编辑,因为我最初的问题不够具体。 我实际上找到了一个解决方案: 我的 fish 函数将评估 Python 脚本返回的任何内容

eval (python go.py $argv)

【问题讨论】:

  • 抱歉,我很着急,没有提供足够具体的信息...我将用更好的信息编辑问题
  • 我怀疑,根据添加的信息,您的原始问题是在 Perl 和 Python 中print 在给定“不存在”值时的不同行为:在 Perl 中,print undef 将不打印任何内容,而在 Python 中,print None 实际上会打印字符串 None。不过,很高兴看到您找到了解决方法。

标签: python bash perl fish


【解决方案1】:

在 Python 2 中你可以这样做:

print >> sys.stderr, """Text to print"""

对于 Python 3,语法为:

print("""Text to print""", file=sys.stderr)

当然,在这两种情况下都需要import sys 才能导入sys 模块。

【讨论】:

  • ... 多行文本可能带有三引号。
【解决方案2】:

已回答here

我发现这是唯一一个短+灵活+便携+可读的:

from __future__ import print_function ...

def warning(*objs): print("WARNING: ", *objs, file=sys.stderr)

【讨论】:

  • 嗨 dvdt,欢迎来到 Stack Overflow。如果您发现可以通过逐字复制粘贴另一个 Stack Overflow 答案来回答的问题,请通过单击问题下方的“标记”按钮将该问题标记为重复。将问题标记为重复问题使用户在搜索时更容易找到它们。
猜你喜欢
  • 2011-02-02
  • 2011-04-25
  • 2012-03-20
  • 2021-07-01
  • 2022-11-11
  • 1970-01-01
  • 2010-09-27
  • 1970-01-01
  • 2011-09-14
相关资源
最近更新 更多