如何在Windows PowerShell中解决无输出重定向问题

时间:2013-06-21 23:40:56

标签: python powershell cygwin

我编写了很多依赖于cygwin中输出重定向的代码。

我现在必须集成一些与cygwin不兼容的库,以及我需要的Windows或Linux。

从cygwin的python script.py 42 <in.txt >out.txt到powershell的等价物是否有顺畅的方法?我知道powershell不能使用输入/输出重定向,至少不能使用<, >(文档说它可能很奇怪)但还有另一种方法吗?

1 个答案:

答案 0 :(得分:1)

PowerShell绝对可以进行输入/输出重定向,它只是没有与bash 完全相同。

我假设你不想真正学习PowerShell,只需快速获得一个&amp;肮脏的回答所以,到此为止。


对于简单的情况,类似bash的语法可以正常工作:

foo > out.txt

如果不起作用,通常只需将Powershell scriptlet中的工具包装起来即可。换句话说,在其中创建一个foo.ps1文件:

foo > out.txt

然后只需运行foo.ps1而不是foo


您可能还想查看Tee-ObjectSet-ContentAdd-ContentStart-Transcript等cmdlet。从A Task-Based Guide to Windows PowerShell Cmdlets开始。

例如,Start-Transcript将标准输出捕获为“哑字符串”并将其写入文件。因此,foo > out.txt的一个等价物是:

Start-Transcript -path out.txt
foo
Stop-Transcript

或者,对于foo >> out.txt

Start-Transcript -path out.txt --append
foo
Stop-Transcript

同样,在另一个方向上,Get-Content读取文本文件并将其打印为哑字符串,您可以将其输出到您的程序:

Get-Content in.txt | foo

当然,另一个明显的可能性是将Python脚本更改为文件名。

在许多情况下,只使用fileinput.input()代替sys.stdin免费提供此功能 - 您可以通过stdin或命令行上的文件名(或各种发烧友)传递文件内容组合)和脚本将以相同的方式看到它。