我需要在python中运行一个脚本,每周备份一次我的mongodb数据库。我在Windows 8.1中使用了任务调度程序,并将脚本设置为在特定时间的特定工作日运行。关键是我的python代码需要生成2个命令行窗口实例,以便在第一个实例中它可以输入建立mongoserver连接的“mongod”命令,在cmd窗口的第二个实例中,需要输入“mongodump”命令,这些只需按此顺序完成和完成。我在python中使用了'os'模块并使用了“os.system('所需的cmd命令')”但是如果使用'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')
//第一个继续,第二个命令是 从来没有到达
因此我需要运行2个单独的cmd窗口实例,因为命令'mongod'建立了连接,之后在cmd窗口中无法写入任何内容,因此'mongodump'命令只能并且需要在其他cmd窗口中执行。请注意,即使可以启动两个cmd窗口实例,但是进入mongod和mongodump命令也不能由用户手动完成,并且必须在python代码本身中预定义。
答案 0 :(得分:0)
看起来你正在寻找一个异步子进程。 https://docs.python.org/3/library/asyncio-subprocess.html#asyncio.create_subprocess_exec
答案 1 :(得分:0)
您可以使用简单的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)。