mysqldump 单个 table 来自 python 子进程

mysqldump single table from python subprocess

我正在尝试通过 mysqldump 从 Ubuntu 上的 运行 脚本 运行 中转储单个 table。

args = ["mysqldump", f"-u{DBUser}", f"-h{DBHost}", f"-p{DBPass}", "--no-tablespaces", f'{DatabaseName}', f'{ArchiveTable}', '>', f'{BucketReadyName}']


subproc_output = subprocess.run(args)

这段代码给出了这个错误。

mysqldump: Couldn't find table: ">"

我尝试了几种不同的安排,但 mysqldump 总是需要另一个 table 名称,而不是 table 列表的末尾。

我需要做哪些不同的事情?这是字符转义问题吗?

> 不是命令参数,它是 shell 语法的一部分。由于您在调用 subprocess.run() 时没有使用 shell=True,因此它不会起作用。

您可以使用 subprocess.run()stdout 参数重定向到文件,而不是使用 shell 重定向。

args = ["mysqldump", f"-u{DBUser}", f"-h{DBHost}", f"-p{DBPass}", "--no-tablespaces", f'{DatabaseName}', f'{ArchiveTable}']

with open(BucketReadyName, 'w') as outfile:
    subprocess.run(args, stdout=outfile)