通过子进程的mysql不起作用

San*_*yBr 3 python mysql subprocess

import os
import subprocess
cmdline = ['mysql -u"username" -p"password" < query.sql']
p = subprocess.Popen(cmdline,stdout=subprocess.PIPE)
stdout,stderr = p.communicate()
retcode = p.wait()
Run Code Online (Sandbox Code Playgroud)

这是我的代码连接到mysql并执行query.sql.对我来说很好看,但它不起作用,坏的是我根本没有得到任何错误信息.retcode是1,从stdout,stderr我只得到mysql标准文本"用法mysql [OPTIONS] [数据库] ..."所以我认为我的语法错了.但事实并非如此.我测试了终端中的代码行,它的工作原理.

python是否有问题通过子进程执行?我只想要一个简单的方法来执行这个小的mysql代码.谢谢.

And*_*Dog 7

cmdline = ['mysql -u"username" -p"password" < query.sql']
Run Code Online (Sandbox Code Playgroud)

这不是使用方式Popen.程序必须是列表的第一个元素,并且应该传递的每个参数也必须是列表的元素.所以它应该是cmdline = ["mysql", "-u", username, "-p", password].此外,这不是shell,因此您不能简单地使用"<query.sql".相反,使用stdin = PIPE参数,然后传递SQL查询,如p.communicate(sqlQuery).

retcode = p.wait()
Run Code Online (Sandbox Code Playgroud)

您已经等待进程结束使用.communicate(),因此您应该使用该p.returncode属性访问返回值.