我试着这样:
execfile('c:/xampp/mysql/bin/mysqldump -h localhost -u ' + username + ' -p' + password + ' ' + database + ' > ' + projectname + '.sql');
然后我看到一个错误:
IOError:[Errno 2]没有这样的文件或目录: 'c:/ xampp / mysql / bin / mysqldump -h localhost -u root -p pr> pr.sql'
我做错了什么?
我想将输出写入文件,如:
output = subprocess.check_output([r'c:\xampp\mysql\bin\mysqldump', '-h', 'localhost', '-u', username, '--password=', database], stdout=open(projectname + '.sql','w'))
不起作用
答案 0 :(得分:4)
execfile不接受整个命令,而是作为第一个参数执行的文件的名称。此外,它是一种调用其他Python程序的方式,而不是通用程序 - 如mysqldump
。
我建议您使用subprocess.call
instead,例如
subprocess.call(['c:/xampp/mysql/bin/mysqldump', '-h', 'localhost', '-u', username, '-p' + password, database])
然后你需要处理重定向(如果你手动运行它通常由你的shell完成),所以完整的解决方案是:
f = open(projectname+".sql", "w")
subprocess.call(['c:/xampp/mysql/bin/mysqldump', '-h', 'localhost', '-u', username, '-p' + password, database], stdout=f)
答案 1 :(得分:2)
execfile
仅用于运行python文件(名称具有误导性)。
此外,它已从Python 3中删除......
对于您的问题,只需使用subprocess.check_output
,正确拆分参数,以便自动处理引用(不要自己编写命令行)。这里-p
选项必须没有空格的密码(这是命令特异性),或使用更清晰的--password
output = subprocess.check_output([r'c:\xampp\mysql\bin\mysqldump', '-h', 'localhost', '-u', username, '--password', password, database])
注意:您的密码似乎是空白的(空字符串),在这种情况下,只需使用--password=
,如解释here
output = subprocess.check_output([r'c:\xampp\mysql\bin\mysqldump', '-h', 'localhost', '-u', username, '--password=', database])
现在你的命令输出在output
(如果命令成功),你可以将它写入一个文件(在你的情况下,你可以用{{1}做得更好}和check_call
因为你似乎还需要stdout=file_handle
文件,而不仅仅是缓冲区):
.sql