私はpythonコードを持っています。私はそれをperlに変換する必要がありますが、残念ながら私はperlではうまくいきません。 STDOUTとSTDERRで特定の単語をチェックしたいと思います。ここでは、Pythonのコードは次のとおりです。PerlへのPythonコード
p = subprocess.Popen("bmod -b " + beginTime + " " + job_id + "; exit 1;",
stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True)
while p.poll() is None:
err = p.stderr.readline().decode('utf_8')
out = p.stdout.readline().decode('utf_8')
if "changed" in err or "changed" in out:
subprocess.Popen("echo rescheduling was successful!", shell=True)
os._exit(0)
私はいくつかのドキュメンテーションを読んでのopen3機能がここで働いてますが、p.poll()の部分は私が何を使用するかわかりません。直後にメッセージ"rescheduling was successful!"
を印刷することが重要である場合
は、Perlで外部プロセスからの出力を読み込むには、いくつかの方法がありますが、最も単純なのは['qx()'](http://perldoc.perl.org/perlop.html#qx%2f_STRING_%2f)、[パイプで開く '](http://perldoc.perl.org/perlipc .html#open%28%for 29-for-IPC)、そして[Capture :: Tiny](https://metacpan.org/pod/Capture::Tiny)のようなものです。 'qx'と' open'に対しては、STDOUTとSTDERRの両方をチェックしたいので、STDERRをリダイレクトする必要があります。 – ThisSuitIsBlackNot
'open3' +' select'が低すぎます。 IPC :: Run3の 'run3'またはIPC :: Runの' run'を使用してください。 – ikegami
@ikegami出力を待つためにこのようなものを使うべきですか? '$ pid = run3'または' $ pid = open3' 'wait($ pid、0)' –