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 に答える