[英]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.