在Python中使用os或subprocess模块在后台运行命令行程序

2 投票
3 回答
4904 浏览
提问于 2025-04-18 14:53

我想在Python中使用ossubprocess模块来运行一个命令。可是命令提示符窗口闪了一下就关掉了。有没有办法让这个命令提示符窗口不弹出来呢?

比如说:

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

有没有办法让我在后台运行这个命令,这样用户就不会注意到它的存在了呢?

我在使用Windows 7,Python版本是2.7。

3 个回答

0

这个代码定义了一个叫做`asyncRun`的函数,它的作用是执行你给它的命令。具体来说,它使用了`os.system`这个功能来运行命令。

接下来,代码创建了一个线程`t`,这个线程的任务是运行`asyncRun`函数,并且传入了一个参数,也就是要执行的命令`ping 127.0.0.1 -s 271`。

最后,`t.start()`这行代码是用来启动这个线程的,也就是说,它会开始执行上面定义的命令。

这段代码可以在Windows 10系统上运行,配合EMET(增强的安全防护工具)和Python 2.7版本。

0

当然了……你甚至还标记了你会用到的模块……

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

这样做应该没问题……

1

最简单的方法就是利用一下 subprocess 模块对 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()

撰写回答