为什么使用mysqldump进行数据库导出时,subprocess.call输出空文件?
我在用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
我不太确定是什么原因导致了这个问题,但现在上面的代码可以正常工作了,经过了以下几个步骤:
- 我重置了Windows中的PATH环境设置,以确保每次电脑启动时,mysqldump的路径都能被添加进来。
- 我重启了电脑(这样可以确保Python和MySQL都重新启动,并且PATH环境设置是正确的)。
现在问题似乎解决了,这有点奇怪。因为.sql文件虽然被创建了,但里面是空的,这说明mysqldump确实是被Python执行了。我不太明白为什么通过Python执行时输出文件是空的,而在CMD命令提示符下执行同样的mysqldump命令却能成功导出数据。