我有一个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完成执行?
发布于 2013-10-08 05:30:04
父进程不等待subprocess.Popen默认生成的子进程。你应该打电话给:
pipe.wait()在subprocess.Popen之后。它将等待子进程终止并让您的python脚本继续。
或者你可以直接用os.system()代替。
https://stackoverflow.com/questions/19239645
复制相似问题