首页   注册   登录
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
GeekHub
zhangzhi0000
V2EX  ›  程序员

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

  •  1
     
  •   zhangzhi0000 · 323 天前 · 1113 次点击
    这是一个创建于 323 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Get-ChildItem $pwd -Filter *.mp3 | ForEach-Object -Process{
    if($_ -is [System.IO.FileInfo])
    {
    python C:\ffmpeg.py $_.name
    }
    }
    

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

    6 条回复    2019-05-23 19:48:43 +08:00
    zhangzhi0000
        1
    zhangzhi0000   323 天前
    标题打错了,是 PowerShell
    xupefei
        2
    xupefei   323 天前
    ffmpeg.py 里要等待 ffmpeg 进程退出。
    zhangzhi0000
        3
    zhangzhi0000   323 天前
    @xupefei 我在 mac 上试了下,是单线程顺序执行下来,没问题,之前 win7 运行的时候多个 ffmpeg 进程同时执行,明天我再去试试
    whe
        4
    whe   323 天前
    目测是 -Process 的锅 不是 | 的
    zhangzhi0000
        5
    zhangzhi0000   322 天前
    @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
        6
    zhangzhi0000   322 天前
    @whe 我知道问题在哪了,是调用的锅,用 Start-Process 带 Wait 参数就可以了。
    Start-Process -FilePath ffmpeg -ArgumentList $d -NoNewWindow -Wait
    关于   ·   FAQ   ·   API   ·   我们的愿景   ·   广告投放   ·   感谢   ·   实用小工具   ·   4400 人在线   最高记录 5168   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 18ms · UTC 06:24 · PVG 14:24 · LAX 23:24 · JFK 02:24
    ♥ Do have faith in what you're doing.