2013-10-08 74 views
2

我有一个Python脚本,它调用一个Perl脚本来分析一些文件并生成输出文件。再次使用Python脚本将这些输出文件上传到MySQL数据库。 Perl脚本大约需要5-7 mins来解析一些文件并生成Python用来上传的输出文件。从Python脚本调用Perl时,Perl没有完全执行

的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

@mpapec,在这个问题中添加我的Perl代码的范围是什么。在投票前你有没有读过我的问题? – aki2all

+0

刚刚删除了Perl标记,没有投下你的问题.. –

回答

3

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

pipe.wait() 

之后subprocess.Popen。它会等待子进程终止并让你的python脚本继续。您可以使用os.system()代替。

+0

我应该在'pipe.wait()'后面加上'pipe.stdin.close()'吗? – aki2all

+0

@ aki2all'pipe.wait()'会阻止你的python脚本,所以你应该把它放在'pipe.stdin.close()'之后。 –

+0

帮了很多..代码现在工作正常.. – aki2all