我正在编写一个脚本来自动化 MySQL 中的数据库导入。我正在尝试编写在pv
导入数据库时显示输出的代码:
pv = subprocess.Popen(
["pv", "-f", restore_filepath],
bufsize=1,
stderr=subprocess.PIPE,
stdout=subprocess.PIPE,
universal_newlines=True,
shell=True,
)
subprocess.Popen(
[
"mysql",
"-u{}".format(db_user),
"-p{}".format(db_pass),
db_name,
],
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.DEVNULL,
stdin=pv.stdout,
)
for line in pv.stderr:
print("hello")
sys.stdout.write("\r" + line.rstrip("\n"))
sys.stdout.flush()
这是基于this question中的代码,但它不适用于我。hello
即使我注释掉 for 循环中的其他行,也从未打印过 -是for line in pv.stderr
阻塞的,我不知道为什么。它永远不会解除阻塞,所以即使进程完成,程序仍然卡住 - 我必须杀死它。
我做错了什么导致for line in pv.stderr
阻塞?