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

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

  •  1
     
  •   zhangzhi0000 · 2019-05-22 20:25:17 +08:00 · 1861 次点击
    这是一个创建于 2021 天前的主题,其中的信息可能已经有所发展或是发生改变。
    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  
    OP
       2019-05-22 22:29:08 +08:00
    标题打错了,是 PowerShell
    xupefei
        2
    xupefei  
       2019-05-22 22:31:33 +08:00
    ffmpeg.py 里要等待 ffmpeg 进程退出。
    zhangzhi0000
        3
    zhangzhi0000  
    OP
       2019-05-22 22:49:27 +08:00
    @xupefei 我在 mac 上试了下,是单线程顺序执行下来,没问题,之前 win7 运行的时候多个 ffmpeg 进程同时执行,明天我再去试试
    whe
        4
    whe  
       2019-05-23 00:17:11 +08:00
    目测是 -Process 的锅 不是 | 的
    zhangzhi0000
        5
    zhangzhi0000  
    OP
       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
        6
    zhangzhi0000  
    OP
       2019-05-23 19:48:43 +08:00
    @whe 我知道问题在哪了,是调用的锅,用 Start-Process 带 Wait 参数就可以了。
    Start-Process -FilePath ffmpeg -ArgumentList $d -NoNewWindow -Wait
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3704 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 04:27 · PVG 12:27 · LAX 20:27 · JFK 23:27
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.