このPythonコードは、Perlスクリプトの細かいデータをパイプします。Pythonを使ってstdin/stdoutをPerlスクリプトに移植するにはどうすればいいですか
import subprocess
kw = {}
kw['executable'] = None
kw['shell'] = True
kw['stdin'] = None
kw['stdout'] = subprocess.PIPE
kw['stderr'] = subprocess.PIPE
args = ' '.join(['/usr/bin/perl','-w','/path/script.perl','<','/path/mydata'])
subproc = subprocess.Popen(args,**kw)
for line in iter(subproc.stdout.readline, ''):
print line.rstrip().decode('UTF-8')
しかし、まずバッファをディスクファイル(/ path/mydata)に保存する必要があります。なお、このようなサブプロセスにPythonコードとパスライン・バイ・ラインのデータをループに掃除機は次のとおり
import subprocess
kw = {}
kw['executable'] = '/usr/bin/perl'
kw['shell'] = False
kw['stderr'] = subprocess.PIPE
kw['stdin'] = subprocess.PIPE
kw['stdout'] = subprocess.PIPE
args = ['-w','/path/script.perl',]
subproc = subprocess.Popen(args,**kw)
f = codecs.open('/path/mydata','r','UTF-8')
for line in f:
subproc.stdin.write('%s\n'%(line.strip().encode('UTF-8')))
print line.strip() ### code hangs after printing this ###
for line in iter(subproc.stdout.readline, ''):
print line.rstrip().decode('UTF-8')
subproc.terminate()
f.close()
コードは、サブプロセスの最初の行を送信した後のreadlineとハング。この完全に同じコードを完全に使用する他の実行可能ファイルがあります。
私のデータファイルは非常に大きくなる可能性があります(1.5 GB)ファイルに保存せずにデータをパイプする方法はありますか?私は他のシステムとの互換性のためにperlスクリプトを書き直したくありません。
ありがとうございました。私は最終的なコードで答えを加えました – tahoar