gpt4 book ai didi

python - 通过子进程的 mysql 不起作用

转载 作者:可可西里 更新时间:2023-11-01 07:50:21 25 4
gpt4 key购买 nike

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 的代码。对我来说看起来不错,但它不起作用,坏的是我根本没有收到任何错误消息。 retcode 是 1,从 stdout,stderr 我只得到 mysql 标准文本“Usage mysql [OPTIONS] [Database] ...”所以我认为我的语法是错误的。但事实并非如此。我在终端中测试了这行代码,它有效。

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

最佳答案

cmdline = ['mysql -u"username" -p"password" < query.sql']

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

retcode = p.wait()

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

关于python - 通过子进程的 mysql 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4977649/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com