Poweshell 管道语句直接是多线程处理吗?如何单线程运行?

2019-05-22 20:25:17 +08:00
 zhangzhi0000
Get-ChildItem $pwd -Filter *.mp3 | ForEach-Object -Process{
if($_ -is [System.IO.FileInfo])
{
python C:\ffmpeg.py $_.name
}
}

例如本代码,我要调用 Python 脚本处理音频文件,比如文件夹下有 10 个 MP3,执行的时候 10 线程同时开始的。

1656 次点击
所在节点    程序员
6 条回复
zhangzhi0000
2019-05-22 22:29:08 +08:00
标题打错了,是 PowerShell
xupefei
2019-05-22 22:31:33 +08:00
ffmpeg.py 里要等待 ffmpeg 进程退出。
zhangzhi0000
2019-05-22 22:49:27 +08:00
@xupefei 我在 mac 上试了下,是单线程顺序执行下来,没问题,之前 win7 运行的时候多个 ffmpeg 进程同时执行,明天我再去试试
whe
2019-05-23 00:17:11 +08:00
目测是 -Process 的锅 不是 | 的
zhangzhi0000
2019-05-23 14:51:06 +08:00
@whe 亲测不是-Process 的问题,我在 mac 和 win7 都测试了不带-Process,mac 是单个进程执行,win7 是同步执行所有的进程。

![]( https://s2.ax1x.com/2019/05/23/VCIxsO.jpg)

mac 和 win7 上都是目前最新的版本( 6.2.1 )

![]( https://s2.ax1x.com/2019/05/23/VCIvQK.jpg)
zhangzhi0000
2019-05-23 19:48:43 +08:00
@whe 我知道问题在哪了,是调用的锅,用 Start-Process 带 Wait 参数就可以了。
Start-Process -FilePath ffmpeg -ArgumentList $d -NoNewWindow -Wait

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/566709

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX