我有一个 Python
脚本,它调用一个 Perl
脚本来解析一些文件并生成输出文件。这些输出文件再次使用 Python 脚本上传到 MySQL
数据库。 Perl 脚本需要大约 5-7 分钟
来解析一些文件并生成 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 完成执行?
最佳答案
默认情况下,父进程不会等待 subprocess.Popen
生成的子进程。你应该调用:
pipe.wait()
在 subprocess.Popen
之后。它将等待子进程终止并让您的 python 脚本继续。
或者您可以只使用 os.system()
代替。
关于python - 从 Python 脚本调用时 Perl 未完全执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19239645/