【问题标题】:mysqldump command working in cmd but not in pythonmysqldump 命令在 cmd 中工作但在 python 中不工作
【发布时间】:2021-08-27 15:33:45
【问题描述】:

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

使用: 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 的不同变体(也尝试通过子进程处理管道,并拆分 args),但从 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 中签出,但在目标数据库中没有看到结果。

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

【问题讨论】:

    标签: python mysql mariadb


    【解决方案1】:

    为任何想知道的人解决。

    将绝对路径与为非 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 配置为查看系统 PATH。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多