相当于 os.system 没有控制台 window?

Equivalent of os.system without a console window?

我有一条线可以与 os.system 一起使用;

os.system("ffmpeg -i file.smh -acodec libmp3lame file.mp3")

其中ffmpeg是一个exe文件。但它在屏幕上创建了一个控制台 window。通常我通过以下方式隐藏控制台 window:

import win32console,win32gui

win = win32console.GetConsoleWindow()
win32gui.ShowWindow(win,1)

我试过了,但没用。 os.system 仍然显示控制台 window。所以我有两个选择:

我尝试使用 subprocess.Popen(["ffmpeg.exe -i file.smh -acodec libmp3lame file.mp3"]),但找不到 ffmpeg.exe。

我该如何解决这个问题?

subprocess.Popen(["ffmpeg.exe -i file.smh -acodec libmp3lame file.mp3"])

应该是:

subprocess.Popen(["ffmpeg.exe", "-i", "file.smh", "-acodec", "libmp3lame file.mp3"])

按照您的方式,您的 OS 将查找名为 ffmpeg.exe -i ... 的可执行文件,而不是名为 ffmpeg-ifile.smh 的可执行文件, ... 作为参数

如果由于某种原因拆分参数有问题,您可以使用 shlex.split 为您正确拆分参数(它将正确处理拆分引用的参数)。