首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >mysqldump和python子进程wait()不工作

问mysqldump和python子进程wait()不工作
EN

Stack Overflow用户
提问于 2020-06-30 02:18:02
回答 1查看 43关注 0票数 0

我使用了4个shell命令来导入和导出mysql

代码语言:javascript
复制
cmd1 > exports table structure 
cmd2 > exports table data 
cmd4 > imports table strcuture
cmd5 > imports table data

如果我直接在命令行上运行,下面4个命令运行得很好。每个命令都应该基于先前的cmd输出逐个执行。cmd2和cmd4可能需要一些时间,因为它是导出/导入表数据。cmd2未正确执行。我只看到空的输出文件。但是如果我直接在shell上运行,同样的命令也能正常工作。我尝试过这里给出的建议,python subprocess and mysqldump。但是得到了和以前一样的结果。

代码语言:javascript
复制
import subprocess

print("subprocess started....")

cmd1 = "mysqldump -h hostnamegoeshere -u FPS_DEV_User -pPASSWORD --single-transaction --no-data --triggers --routines novatime  --ignore-table=novatime.novatime_detail_paycom --ignore-table=novatime.novatime_schedules --ignore-table=novatime.novatime_schedules_new > /home/ec2/dba/subprocess/mysql-migration/novatime_mysqldump_so.sql 2> /home/ec2/dba/subprocess/mysql-migration/novatime_mysqldump_so_err.sql"
cmd2 = "mysqldump --host hostnamegoeshere -u FPS_DEV_User  -pPASSWORD --compress --single-transaction --no-create-info --add-locks --lock-tables --quick --disable-keys novatime > /home/ec2/dba/subprocess/mysql-migration/novatime_mysqldump_do.sql 2> /home/ec2/dba/subprocess/mysql-migration/novatime_mysqldump_do_err.sql"
cmd4 = "mysql --host hostnamegoeshere -u admin -PASSWORD -f novatime < /home/ec2/dba/subprocess/mysql-migration/novatime_mysqldump_so.sql 2> /home/ec2/dba/subprocess/mysql-migration/novatime_mysqldump_so_err.sql" 
cmd5 = "mysql --host hostnamegoeshere -u admin -PASSWORD -f novatime < /home/ec2/dba/subprocess/mysql-migration/novatime_mysqldump_do.sql 2> /home/ec2/dba/subprocess/mysql-migration/novatime_mysqldump_do.sql" 

try:
    
    print('process1')
    process1 = subprocess.Popen(cmd1,stdout=subprocess.PIPE, shell=True)

    process1.wait()
    print('process2')
    process2 = subprocess.Popen(cmd2,stdout=subprocess.PIPE, shell=True)

    process2.wait()
    print('process4')
    process4 = subprocess.Popen(cmd4,stdout=subprocess.PIPE, shell=True)

    process4.wait()
    print('process5')
    process5 = subprocess.Popen(cmd5,stdout=subprocess.PIPE, shell=True)

    process5.wait()

except:
    print('error')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-30 02:23:51

您应该在等待之前关闭前面进程的stdout。

代码语言:javascript
复制
print('process1')
process1 = subprocess.Popen(cmd1,stdout=subprocess.PIPE, shell=True)

process1.stdout.close()
process1.wait()
print('process2')
process2 = subprocess.Popen(cmd2,stdout=subprocess.PIPE, shell=True)
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62644352

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档