繁体   English   中英

如何在顺序重要的地方在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. 使用完文件后,我想删除远程文件,因此我们不会用完空间。

发生的事情是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)

我不想这样做,因为我的命令已参数化并且可能很长/很复杂。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM