通过子进程调用mysql无效
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()
这是我用来连接mysql并执行query.sql的代码。看起来没问题,但它就是不工作,最糟糕的是我根本没有收到任何错误信息。返回代码是1,而从标准输出和标准错误中,我只看到mysql的标准提示信息“Usage mysql [OPTIONS] [Database] ...”,所以我以为我的语法有问题。但其实并没有。我在终端测试了这行代码,它是可以正常工作的。
难道python在通过子进程执行这个的时候有问题吗?我只是想简单地执行这段小的mysql代码。谢谢。
2 个回答
1
这不是一个直接的答案,但如果你想从Python中调用MySQL,通常使用DBAPI库会更简单、更易于控制。你可以查看一下这个Python维基,或者更进一步使用像SQLAlchemy这样的ORM工具。
关于如何调用MySQL的一个例子可以在这里找到。
7
cmdline = ['mysql -u"username" -p"password" < query.sql']
这不是使用 Popen
的正确方法。程序名必须放在列表的第一个位置,所有要传递的参数也要作为列表的元素。所以应该写成 cmdline = ["mysql", "-u", username, "-p", password]
。另外,这里不是在使用命令行,所以不能直接用 "< query.sql"。你应该使用 stdin = PIPE
这个参数,然后通过 p.communicate(sqlQuery)
来传递 SQL 查询。
retcode = p.wait()
你已经通过 .communicate()
等待进程结束了,所以你可以通过 p.returncode
属性来获取返回值。