我的Python2.7和pypy(使用virtualenv)都在Windows 10环境下。在模拟软件的README文件中,下面的Bash命令中包含一个“ for loop”脚本。如何将下面的“ for loop”(三行)Bash命令转换为等效的Windows 10 Powershell命令?
“最好并行运行多个进程,例如:
$ for i in {1..10}; do
$ time $pypy epto.py conf_epto/ $i > conf_epto/run-$i.log $
$ done
$pypy genStats.py conf_epto 10
我试图运行Powershell命令,但遇到错误:
(my-pypy-env) PS C:\Users\Acer\dev\pypy27home\my-pypy-env\SimpleDA-master> for ( $i = 1; $i -le 10; $i++) {
>> $pypy epto.py conf_epto/ $i > conf_epto/run-$i.log $
>> done}
At line:2 char:7
+ $pypy epto.py conf_epto/ $i > conf_epto/run-$i.log $
+ ~~~~~~~
Unexpected token 'epto.py' in expression or statement.
+ CategoryInfo : ParserError: (:) [], ParentContainsErrorRecordException
+ FullyQualifiedErrorId : UnexpectedToken
答案 0 :(得分:0)
foreach ($i in 1..10) {
Measure-Command { & $pypy epto.py conf_epto/ $i > conf_epto/run-$i.log } | Out-Host
}
& $pypy genStats.py conf_epto 10
foreach ($i in 1..10)
遍历使用PowerShell的range operator (..
)创建的数组1..10
的元素;诸如foreach
之类的复合语句的主体始终包含在PowerShell中的{ ... }
中。
Measure-Command
与PowerShell等效,内置于Bash的time
;将要执行的要测量的命令作为脚本块({ ... }
)传递。
除了Windows PowerShell >
在默认情况下会创建“ Unicode”文件-UTF16-LE-文件(在PowerShell Core < / em>是没有BOM的UTF-8)。 >
是Out-File
cmdlet的有效别名;使用不同的编码,将其传递给管道并使用-Encoding
参数(例如,
... | Out-File -Encoding utf8 conf_epto/run-$i.log
),尽管请注意,在Windows PowerShell中,-Encoding utf8
总是创建一个UTF-8文件带有BOM 。
time
将其结果直接输出到终端而不是标准输出; Out-Host
也是如此;它会绕过PowerShell的标准输出success [output] stream。
PowerShell要求使用&
(call operator)执行名称或路径指定为变量($pypy
的命令;此要求源于PowerShell具有两个不同的parsing modes。