在Python中打开两个不同的'cmd'窗口并在每个窗口中自动执行两个不同的命令的最简单方法



我需要在python中运行一个脚本,该脚本每周备份我的mongodb数据库。我在windows 8.1中使用了任务调度程序,并将脚本设置为在特定的工作日、特定的时间运行。重点是,我的python代码需要生成两个命令行窗口实例,以便在第一个实例中可以输入"mongod"命令来建立mongoserver连接,而在第二个cmd窗口实例中,需要输入"mongoodump"命令,这些都必须按此顺序完成。我在python中使用了"os"模块,并使用了"os.system('desired cmd command')",但如果第二次使用"os.system'"启动第二个cmd实例,它会关闭第一个cmd示例窗口并运行self(第二个实例),因此所需的进程会中断。我需要确保第一个命令"mongod"和第二个命令"mongodump"将从已经编写的python代码本身自动输入到相应的cmd窗口中,而不是手动或从外部输入任何内容。我尝试过的是::1)

import os  
os.system('mongod')      //this stops
os.system('mongodump')  //this starts

2)

import os
os.system('mongod && mongodump')  

//第一个命令继续,第二个命令为从未达到

因此,当命令"mongod"建立连接时,我需要运行cmd窗口的两个独立实例,之后在cmd窗口中无法写入任何内容,因此"mongodump"命令只能并且需要在其他cmd窗口执行。请注意,即使可以启动cmd窗口的两个实例,但用户也无法手动输入mongod和mongodump命令,并且必须在python代码中预定义。

看起来您正在寻找一个异步子流程。https://docs.python.org/3/library/asyncio-subprocess.html#asyncio.create_subprocess_exec

您可以使用一个简单的Windows.bat或.cmd脚本来完成此操作,如下所示:

START /B "" mongod
TIMEOUT /T 10 /NOBREAK
mongodump

只要在正确的时间运行它,它就会为您启动这两个进程。我认为mongod进程将在主脚本完成后自动终止(请参阅https://superuser.com/questions/198525/how-can-i-execute-a-windows-command-line-in-background#comment1569081_591084)。

最新更新