如何在命令重要的python脚本中运行多个linux命令

时间:2015-03-18 22:44:07

标签: python linux scripting

我正在尝试使用subprocess.Popen()在我的python脚本中顺序执行几个linux命令。但是,这似乎是我编写脚本的方式,python正在执行某种执行而忘记,而不是在开始第2步之前等待第1步完成。

例如,我正在尝试:

  1. 执行SQL命令,将结果写入/ tmp中的文件 远程服务器。
  2. 使用完文件后,我想删除远程文件,所以不会耗尽空间。
  3. 正在发生的事情是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)
    

    我不想做,因为我的命令是参数化的,可能很长/很复杂。

2 个答案:

答案 0 :(得分:2)

只需使用subprocess.call而不是subprocess.Popen,它应该会阻止,直到流程完成。

答案 1 :(得分:2)

如果需要,可以使用proc.wait(),它甚至可以使用超时值。