我已经编写了很多依赖 cygwin 中的输出重定向的代码。
我现在必须集成一些与 cygwin 不兼容的库,并且在我的情况下需要 Windows 或 Linux。
python script.py 42 <in.txt >out.txt
从 cygwin到 powershell 的等价物是否有一种平稳的方法?我知道powershell不能使用输入/输出重定向,至少不能使用<, >
(文档说它可以很奇怪)但是还有其他方法吗?
我已经编写了很多依赖 cygwin 中的输出重定向的代码。
我现在必须集成一些与 cygwin 不兼容的库,并且在我的情况下需要 Windows 或 Linux。
python script.py 42 <in.txt >out.txt
从 cygwin到 powershell 的等价物是否有一种平稳的方法?我知道powershell不能使用输入/输出重定向,至少不能使用<, >
(文档说它可以很奇怪)但是还有其他方法吗?
PowerShell 绝对可以进行输入/输出重定向,只是它的方式与 bash 不同。
我假设你不想真正学习 PowerShell,只是得到一个快速而肮脏的答案。所以,就这样吧。
对于简单的情况,类似 bash 的语法可以正常工作:
foo > out.txt
当这不起作用时,通常只需将工具包装在 Powershell scriptlet 中即可。换句话说,创建一个foo.ps1
包含以下内容的文件:
foo > out.txt
然后只需运行foo.ps1
而不是foo
.
您可能还想查看Tee-Object
、Set-Content
、Add-Content
和Start-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
免费为您提供此功能-您可以通过标准输入向它传递文件的内容,或者在命令行上传递文件名(或各种更高级的组合),脚本将以相同的方式看到它。