如何在不使用大内存缓冲区的情况下将一个命令的输出传输到另一个命令?

时间:2014-07-30 19:36:34

标签: powershell pipe

我试图在powershell中将一个命令的输出传递给另一个命令。下面的代码管道输出" xCommand"进入" compressionCommand":

$xCommand = "C:\Python27\python.exe"
$xArgs = "arg1","arg2","arg3"

$compressionCommand = "C:\Program Files\7-Zip\7z.exe"
$compressionArgs = "a", "X.gz", "-tgzip", "-siX.csv"

& $xCommand $xArgs | & $compressionCommand $compressionArgs

powershell似乎正在做的是将第一个命令的输出的全部内容存储到内存中,然后将输出汇总到第二个命令中。这是一个问题,因为第一个命令的输出远大于系统的内存量。

有没有办法强制PowerShell实际使用管道而不是缓冲第一个命令的内容?

1 个答案:

答案 0 :(得分:2)

不,

PowerShell需要一直运行你的第一个命令,有效地在End块中,然后才能将任何东西传递给管道。如果您将python脚本更改为每次运行生成一个项目,则可以遍历列表,每次都将一个文件添加到归档中。

虽然如果您正在深入研究python脚本,为什么不在那里进行整个操作? Python甚至应该有一个可以使用的gzip模块。