【问题标题】:mysqldump and python subprocess wait() not workingmysqldump 和 python 子进程 wait() 不工作
【发布时间】:2020-06-30 02:23:51
【问题描述】:

我有 4 个 shell 命令用于 mysql 导入和导出

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。但得到的结果和以前一样。

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')

【问题讨论】:

    标签: mysql python-2.7 subprocess


    【解决方案1】:

    您应该在等待之前关闭先前进程的标准输出。

    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)
    

    【讨论】:

    • 感谢它的工作。有另一个重复的文件替换了数据文件。
    猜你喜欢
    • 2013-07-27
    • 2011-04-05
    • 2015-01-07
    • 2011-03-01
    • 1970-01-01
    • 2011-02-12
    • 1970-01-01
    • 2016-11-04
    • 1970-01-01
    相关资源
    最近更新 更多