如何解决Windows powersh中的无输出重定向问题

2024-04-19 04:56:37 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

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


Tags: 方法代码in文档pytxtlinuxwindows
1条回答
网友
1楼 · 发布于 2024-04-19 04:56:37

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

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


对于简单的情况,类似bash的语法可以很好地工作:

foo > out.txt

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

foo > out.txt

然后只运行foo.ps1,而不是foo。在


您可能还需要查看Tee-ObjectSet-ContentAdd-Content、和{}等cmdlet。以A Task-Based Guide to Windows PowerShell Cmdlets开头。在

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

^{3}$

或者,对于foo >> out.txt

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

类似地,在另一个方向,^{}读取一个文本文件并将其打印为一个哑字符串,您可以通过管道将其发送到程序:

Get-Content in.txt | foo

当然,另一个明显的可能性是更改Python脚本以获取文件名。在

在许多情况下,只需使用^{}而不是sys.stdin就可以免费地将文件内容通过stdin传递给它,或者在命令行上传递一个文件名(或各种更为复杂的组合),脚本也会以同样的方式看到它。在

相关问题 更多 >