我有一个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完成执行?
答案 0 :(得分:3)
默认情况下,父进程不会等待subprocess.Popen
生成的子进程。你应该致电:
pipe.wait()
在subprocess.Popen
之后。它将等待子进程终止并让你的python脚本继续。
或者您可以改为使用os.system()
。