从Python脚本调用时,Perl没有完全执行

时间:2013-10-08 05:20:25

标签: python mysql

我有一个Python脚本,它调用Perl脚本来解析一些文件并生成输出文件。再次使用Python脚本将这些输出文件上载到MySQL数据库。 Perl脚本需要5-7 mins来解析一些文件并生成Python用来上传的输出文件。

Python脚本就像:

import subprocess
pipe = subprocess.Popen(["perl", "./parser.pl"], stdin=subprocess.PIPE)
pipe.stdin.close()

#Now, load the output files from parser.pl to database.

sql01 = """LOAD DATA LOCAL INFILE 'sequence.parsed' INTO TABLE nasequenceimp FIELDS TERMINATED BY '\t' OPTIONALLY ENCLOSED BY '"' LINES TERMINATED BY '\n';"""

try:
  c.execute(sql01)
  conn.commit()
except StandardError, e:
  print e
  conn.rollback()

但是,似乎Python脚本已终止,Perl脚本继续解析文件。因此,Python会发现错误sequence.parsed does not exist

为什么Python脚本不等待Perl完成执行?

1 个答案:

答案 0 :(得分:3)

默认情况下,父进程不会等待subprocess.Popen生成的子进程。你应该致电:

pipe.wait()
subprocess.Popen之后

。它将等待子进程终止并让你的python脚本继续。

或者您可以改为使用os.system()