我使用python子进程运行mysqlimport命令。为了跟踪上传进度,我使用了一个命名管道和管道查看器。
这是另一个类似的problem
子进程管道运行时没有任何错误,但mysqlimport命令没有将数据上载到所需的表。

import subprocess, os, sys
os.mkfifo('named_pipe')
pv = subprocess.Popen(
    ["pv", "-f", "file.csv", ">", "named_pipe"],
    stdout=subprocess.PIPE,
    stderr=subprocess.PIPE,
)
pro = subprocess.Popen(
["mysqlimport", "--ignore-lines=1", "--fields-terminated-by=\',\'",
"--local", "-u", "root", "-pRoot@123", "database_name", named_pipe],
stdin=pv.stdout,
)

pv.stdout.close()

这是一个简单的mysqlimport命令,它运行良好并正在上载数据,但是如果没有pipe-viewer,则无法跟踪进度:
pro = subprocess.Popen(
["mysqlimport", "--ignore-lines=1", "--fields-terminated-by=\',\'",
 "--local", "-u", "root", "-pRoot@123", "database_name", "file.csv"],
stdout=subprocess.PIPE
)

以下是使用pipe_viewer和mysqlimport的terminal命令,该命令运行良好:
$ mkfifo named_pipe

$ pv -f file.csv > named_pipe | mysqlimport --ignore-lines=1 --fields-terminated-by=',' --local -u root -pRoot@123 database_name named_pipe

最佳答案

要使“>”重定向正常工作,您很可能需要将“shell=True”设置为Popen函数。

10-04 11:16