为什么使用mysqldump进行数据库导出时,subprocess.call输出空文件?

0 投票
1 回答
503 浏览
提问于 2025-04-15 17:28

我在用subprocess.call来导出数据库时遇到了一些问题,使用的是Windows 7上的Python 3.1。

from time import gmtime, strftime
import subprocess

DumpDir = "c:/apps/sqlbackup/";
DumpFile = "mysqldump-" + strftime("%Y-%m-%d-%H-%M-%S", gmtime()) + ".sql";

params = [r"mysqldump --user root --password=mypassword --force --flush-privileges --compress --comments mydatabase --result-file=" + DumpDir + DumpFile];

subprocess.call(params, shell=True);

上面的代码导致在DumpDir目录下生成了一个空文件。

我尝试让Python打印出命令,这样我就可以在CMD命令提示符下测试它,使用的是:

print(subprocess.list2cmdline(params));

如果我把输出粘贴到CMD命令提示符并执行,它就能正常工作。

有什么想法吗?

我刚接触Python,所以我知道答案应该很简单,但我尝试了很多不同的方法都无法解决这个问题。

1 个回答

1

我不太确定是什么原因导致了这个问题,但现在上面的代码可以正常工作了,经过了以下几个步骤:

  1. 我重置了Windows中的PATH环境设置,以确保每次电脑启动时,mysqldump的路径都能被添加进来。
  2. 我重启了电脑(这样可以确保Python和MySQL都重新启动,并且PATH环境设置是正确的)。

现在问题似乎解决了,这有点奇怪。因为.sql文件虽然被创建了,但里面是空的,这说明mysqldump确实是被Python执行了。我不太明白为什么通过Python执行时输出文件是空的,而在CMD命令提示符下执行同样的mysqldump命令却能成功导出数据。

撰写回答