python - 从 Python 脚本调用时 Perl 未完全执行

标签 python mysql

我有一个 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/

相关文章:

mysql - Rails 迁移问题 - 未创建外键

python 在 git bash 中记录到 stdout

php - 使用ajax和php上传图片和数据

python - Pandas 拆分句子和标签短语来执行 BIO 标记

python - 如何显示每个 matplotlib 子图的 x 轴标签

java - 在sql中计算平均值并使用jdbc更新它

PHP动态页面无法运行

mysql - MySQL 上的全文搜索,但词序必须重要

python - n维遍历

Python HDFS : Cannot read file