如何用参数Python执行execfile文件?

时间:2017-11-12 20:41:56

标签: python python-2.7

我试着这样:

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'))

不起作用

2 个答案:

答案 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