0

我在使用 subprocess.call 使用 mysqldump 导出数据库时遇到了一些问题。我正在使用安装在 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 新手,所以我确信答案很简单,但我尝试了很多变体来让它工作,我就是想不通。

4

1 回答 1

1

我不确定究竟是什么导致了这个问题,但上面的代码现在可以在以下情况下工作:

  1. 我在 Windows 中重置了 PATH 环境设置,以确保每次 PC 启动时都会添加 mysqldump 的路径。
  2. 我重新启动了 PC(以确保 Python/MySQL 已重新启动并且 PATH 环境设置绝对正确)。

现在问题似乎解决了,这有点奇怪。.sql 文件正在创建但为空的事实表明 mysqldump 是由 Python 执行的。我不确定为什么在 Python 执行时输出文件为空,而不是从 CMD 提示符执行相同的 mysqldump 命令提供了成功的导出。

于 2009-12-30T10:15:07.860 回答