0

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

我现在必须集成一些与 cygwin 不兼容的库,并且在我的情况下需要 Windows 或 Linux。

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

4

1 回答 1

1

PowerShell 绝对可以进行输入/输出重定向,只是它的方式与 bash 不同

我假设你不想真正学习 PowerShell,只是得到一个快速而肮脏的答案。所以,就这样吧。


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

foo > out.txt

当这不起作用时,通常只需将工具包装在 Powershell scriptlet 中即可。换句话说,创建一个foo.ps1包含以下内容的文件:

foo > out.txt

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


您可能还想查看Tee-ObjectSet-ContentAdd-ContentStart-Transcript等 cmdlet。从基于任务的 Windows PowerShell Cmdlet 指南开始。

例如,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免费为您提供此功能-您可以通过标准输入向它传递文件的内容,或者在命令行上传递文件名(或各种更高级的组合),脚本将以相同的方式看到它。

于 2013-06-21T23:47:19.113 回答