我正在尝试使用subprocess.Popen()在我的python脚本中顺序执行几个linux命令。但是,这似乎是我编写脚本的方式,python正在执行某种执行而忘记,而不是在开始第2步之前等待第1步完成。
例如,我正在尝试:
正在发生的事情是python似乎在第1步运行cmd并且没有等待第1步完成,它运行第2步。因此,文件仍然处于闲置状态,因为删除是在创建文件之前运行的。
这是我的代码段。希望有人可以告诉我如何制作它,所以第2步只在第1步完成后运行。我试图匿名/简化代码段,所以请原谅在匿名代码时出现的任何错误。
sqlCmd = "ssh " + HOST + "mysql -h host -ppwd -q select blah from table where foo = 'bar' INTO OUTFILE '/tmp/blah_bydate.csv"
rmCmd = "ssh " + HOST + " rm -f /tmp/blah_bydate.csv"
proc = subprocess.Popen(sqlCmd, shell=True, stdout=subprocess.PIPE)
proc = subprocess.Popen(rmCmd, shell=True, stdout=subprocess.PIPE)
我在SO上发现了建议的解决方案是做
之类的事情subprocess.Popen([cmd1; cmd2; cmd3], shell=True, stdout=subprocess.PIPE)
我不想做,因为我的命令是参数化的,可能很长/很复杂。
答案 0 :(得分:2)
只需使用subprocess.call
而不是subprocess.Popen
,它应该会阻止,直到流程完成。
答案 1 :(得分:2)
如果需要,可以使用proc.wait(),它甚至可以使用超时值。