如何在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
答案 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 }