【问题标题】:Powershell executing python: redirect print statements only?Powershell执行python:仅重定向打印语句?
【发布时间】:2017-12-17 15:01:47
【问题描述】:

Powershell 中是否有办法将打印语句从 python 重定向到一个地方,并将返回语句重定向到另一个地方?

例如我正在尝试

$ python myPythonScript.py args >> logFile

我在我的日志文件中得到了打印语句输出(虽然它看起来很糟糕,但清洁将是下一个工作)

但是,我没有从输出中的 python 获取 return 语句值。如果我使用*>>,我也不会抓住它们

有什么想法吗?

Python 示例:

def main(args)
     print "This goes to file"
     #parse flags...
     #do something here...
     MyVar = "Please " + "Work"

     return MyVar #doesn't go anywhere
if(__name__ == '__main__':
     main(sys.argv)

【问题讨论】:

  • 什么是“退货声明”?
  • 添加了 Python 示例
  • 您只能从应用程序中返回整数,因此您将无法获取该字符串。您使用echo %errorlevel% 打印返回的python 脚本的int 值。我会回答的。
  • sys.stderr.write()

标签: python powershell redirect output


【解决方案1】:

程序(或退出代码)的返回值只能是整数,不能是字符串。

首先,确保您返回一个 int,或者执行exit(n),其中 n 是一个 int。

您可能还想修复:

if(__name__ == '__main__'):
     return main(sys.argv)

然后您可以在 Powershell 中使用 echo %errorlevel% 访问您的程序(脚本)的返回值

如果你真的想要一个字符串被 powershell 使用,你应该:

  1. 在 stderr 而不是 stdout 上打印您的日志
  2. 在执行结束时在标准输出上打印文件名
  3. 如果您需要重定向,则将 stderr 重定向到您的日志文件,并将 stdout 重定向到 powershell 管道 | - 或者您可以在括号 $() 内执行 python 脚本,以便可以在命令行上使用结果

【讨论】:

  • 谢谢法比恩。我如何获得我需要的字符串?在我的实际程序中,我需要返回的字符串是文件名 - 整数不起作用。
  • 我现在正在玩这个。如何将一个引导到日志文件,一个引导到管道?有很好的例子here,但是如何一次通话直接到两个不同的地方? -RedirectStandardOutput 好像只接受一个文件?
  • 你所做的只是重定向stderr,而stdout自然是通过管道传送的。我建议你也试试$() 功能,它很有帮助。
猜你喜欢
  • 2018-07-03
  • 2021-09-17
  • 2022-08-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-13
  • 2021-12-07
  • 2013-10-17
相关资源
最近更新 更多