如何在powershell的命令测量中使用输出重定向?

时间:2014-11-12 02:48:54

标签: powershell time cmd

如何在powershell的命令测量中使用输出重定向?

我想要一些类似于Linux的time,这是一个简单的程序来计算程序运行的时间

我认为这会有效,但标准输出不会重定向:Measure-Command {start-process python printstuff.py > Output.txt -Wait}

示例输入:

Measure-Command {echo hi}

示例输出:

Days              : 0
Hours             : 0
Minutes           : 0
Seconds           : 0
Milliseconds      : 0
Ticks             : 1318
TotalDays         : 1.52546296296296E-09
TotalHours        : 3.66111111111111E-08
TotalMinutes      : 2.19666666666667E-06
TotalSeconds      : 0.0001318
TotalMilliseconds : 0.1318

1 个答案:

答案 0 :(得分:1)

问题是Start-Process没有写入标准输出。相反,它会创建一个新的控制台窗口,并将其标准输出设置为控制台窗口来运行该过程。使用重定向操作符会将stdout重定向到Start-Process,但由于它没有写入stdout,因此会得到一个空文件。

解决方案是使用-RedirectStandardOutput选项告诉Start-Process将stdout重定向到它开始的进程。

Measure-Command { Start-Process python printstuff.py -RedirectStandardOutput output.txt -Wait }

请注意,如果要将任何选项传递给python程序,则必须明确指定-ArgumentList

Measure-Command { Start-Process python -ArgumentList ('printstuff.py','-opt') -RedirectStandardOutput output.txt -Wait }

-ArgumentList的混乱意味着除非你确实需要使用Start-Process,否则你可能会发现删除它更容易,然后重定向正常工作:

Measure-Command { python printstuff.py >output.txt }

请注意,如果要引用可执行文件的名称(或使用变量中的值),则需要使用调用操作符(我提到这一点,因为我想知道这是否是您查看Start-Process的原因首先):

Measure-Command { & "C:\Python34\python" printstuff.py >output.txt }