繁体   English   中英

mysqldump 命令在 cmd 中有效,但在 python 中无效

[英]mysqldump command working in cmd but not in python

我正在尝试使用 mysqldump 进行一些测试,将数据从一个数据库转储到另一个数据库。 mysqldump在PATH中设置,命令在CMD接口或通过a.cmd完美运行。 它似乎在 python 中运行正常,包装在一个简单的 try/except 块中,但我在目标数据库中没有得到任何结果。

使用:MariaDB 10.1 & 10.5 / Python 3.9

该命令类似于以下内容:

mysqldump --no-create-info --no-create-db --user root -p****** --port=some_port -h 127.0.0.1 some_database some_table | 
mysql --user root -p***** --port=some_port -h 127.0.0.1 target_table

我尝试的是 Popen 的不同变体(也尝试通过子进程处理 pipe 并拆分参数),但从stackoverflow其他地方给出的最简单的解决方案开始:

subprocess.Popen("mysqldump --no-create-info --no-create-db --user root -p****** --port=some_port -h 127.0.0.1 some_database some_table | 
mysql --user root -p***** --port=some_port -h 127.0.0.1 target_table", shell=True)

我还制作了一个.cmd 文件并在 windows 中运行它,它工作正常。 将它传递给 python 中的 Popen() 或 os.system() 会出现同样的问题,似乎在 try/except 中检查出来,但在目标数据库中没有看到结果。

可能是什么问题,我该如何解决?

为任何想知道的人解决。

将绝对路径与为非 8dot3 文件名生成的短名称一起放入命令中,如下所示:

'C:\\PROGRA~1\\MARIAD~1.1\\bin\\mysqldump.exe --no-create-info --no-create-db --user root -p****** --port=some_port -h 127.0.0.1 some_database some_table |
 C:\\PROGRA~1\\MARIAD~1.1\\bin\\mysql.exe --user root -p****** --port=some_port -h 127.0.0.1 some_database'

这是我的工作笔记本电脑,他们只授予在我的用户帐户上添加到 PATH 的权限,而不是整个系统。 将我的 Python 配置为查看系统路径。

看到它在命令行和 a.cmd 脚本中工作有点令人困惑,但在 Python 中却没有。 并且在运行时,不要告诉我它不是“被识别为内部命令......”,而在其他情况下它确实如此。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM