2

我有一个Python脚本,它调用一个Perl解析一些文件并生成输出文件的脚本。这些输出文件再次MySQL使用 Python 脚本上传到数据库中。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 完成执行?

4

1 回答 1

3

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

pipe.wait()

之后subprocess.Popen。它将等待子进程终止并让您的 python 脚本继续。

或者你可以直接使用os.system()

于 2013-10-08T05:30:04.150 回答