首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过linux上的pwsh写入文件描述符3?

如何通过linux上的pwsh写入文件描述符3?
EN

Stack Overflow用户
提问于 2022-11-04 12:59:06
回答 1查看 53关注 0票数 1

我在linux上使用pwsh运行一些特定的powershell模块。

我想把接收到的数据输出到文件描述符3,我想要文件描述符3上的数据,因为Powershell不遵守stdout是数据和stderr是日志的约定。我希望文件描述符3充当我们的“数据”文件描述符。

最终目标是在我们用Python包装这个powershell调用时能够这样做,并且我们将自己重定向文件描述符3数据

pwsh -f script.ps1 3>data

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-11-04 15:01:20

除了stdout (1)和stderr (2)之外,1没有内置的输出到流的方式(下面将详细介绍)。

可以想象,您可以使用.NET API和/或P/Invoke调用提交自己的输出行为,但这将非常麻烦。

但是,可能不需要这样做:

  • 事实上--不幸的是-- PowerShell默认将其所有输出流的输出发送到stdout --参见GitHub问题#7989 --如果在调用方应用2>重定向,则可以将PowerShell错误流重定向到stderr。

以下调用,例如来自bash的调用,说明了这一点:

代码语言:javascript
复制
# Prints just 'hi', because the error-stream output was
# redirected to stderr thanks to 2>, and due to targeting /dev/null, suppressed.
pwsh -noprofile -c '"hi"; Write-Error no!' 2>/dev/null

缺点是,如果您也想打印stderr输出,则必须在文件中捕获它,然后再打印它,这意味着它(a)在生成时不会出现,(b)因此不会与任何stdout输出正确交织。

作为旁白:

  • PowerShell CLI的当前行为( v7.2.x)不仅在如何映射输出流方面很不幸,而且还因为默认情况下它加载了配置文件
  • 有人说要提供一个单独的CLI来解决后一个问题,在这个上下文中,流映射行为也可以修复,但是到目前为止还没有发生什么:参见GitHub问题#8072
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74317443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档