【问题标题】:running command line programs in background using python os or subprocess module使用 python os 或 subprocess 模块在后台运行命令行程序
【发布时间】:2014-09-18 10:21:29
【问题描述】:

我正在尝试在 python 中使用 ossubproccess 模块运行命令。命令提示符窗口在终止之前会短暂闪烁。有没有办法消除弹出命令提示符窗口..?

例如:

os.system("ffmpeg -i output.wav output.flac")

有没有办法让我在后台运行它,这样用户可能不会注意到这一点..?

我正在使用 python 2.7 运行 Windows 7。

【问题讨论】:

    标签: python python-2.7 ffmpeg subprocess


    【解决方案1】:

    粗略的......你甚至用你将使用的模块标记它......

    subproccess.Popen("ffmpeg -i output.wav output.flac".split(),shell=True).communicate()
    

    应该这样做……

    【讨论】:

    • 我想你的意思是shell=False
    • shell=True 会告诉它使用系统环境...这样你就不必传入诸如 env 之类的东西...shell=False 可能会中断,除非 ffmpeg 与传入脚本或绝对路径
    • 如果你使用shell=True,你不能传递参数列表,它必须是一个字符串。当您使用shell=False 时,您仍然可以获得系统环境,只是实际上并没有生成一个shell 来执行命令。此外,OP 特别希望避免在命令运行时短暂出现命令提示符窗口,我想使用 shell=True 不会阻止(虽然没有 Windows 机器来验证这一点)。
    • 是的,看起来你是对的,它不需要传递 shell 在 Windows 上是真的......我的错
    【解决方案2】:

    最简单的方法是尝试利用subproccess 模块对STARTUPINFO 结构的部分支持。像这样的:

    info = subprocess.STARTUP_INFO()
    info.dwFlags = subprocess.STARTF_USESTDHANDLES | subprocess.STARTF_USESHOWWINDOW
    info.wShowWindow = subprocess.SW_HIDE
    
    process = subprocess.Popen("ffmpeg -i output.wav output.flac", startupinfo=info)
    process.wait()
    

    【讨论】:

      【解决方案3】:

      def asyncRun(command): os.system(command)

      t = Thread(target=asyncRun, args=('ping 127.0.0.1 -s 271',)) t.start()

      适用于 Windows 10 + EMET + 2.7

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2020-05-18
        • 2014-09-30
        • 2016-12-30
        • 2017-03-28
        • 2015-06-02
        • 2018-02-12
        • 2016-11-08
        • 1970-01-01
        相关资源
        最近更新 更多