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

How to run multiple linux commands in python script where order matters

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

举个例子,我正在尝试:

  1. 执行 SQL 命令,将结果写入 /tmp 中的文件 远程服务器。
  2. 当我使用完文件后,我想删除远程文件,所以我们不运行出space。

发生的事情是 python 似乎 运行 第 1 步的 cmd 并且没有等待第 1 步完成,它 运行 第 2 步。所以文件仍然挂起因为删除是 运行 在创建文件之前。

这是我的代码片段。希望有人能告诉我如何在第 1 步完成后仅 运行 秒完成第 2 步。我试图 anonymize/simplify 代码片段,所以请原谅在匿名代码时犯的任何错误。

   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)

我不想这样做,因为我的命令已参数化并且可以是 long/complex。

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

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