ログファイルにログを出力するように設定されたログオブジェクトを持つpythonプロセスがあります。Python:サブプロセスPopen stdoutをログファイルにリダイレクト
ここではscala
スクリプトをこのpython
プロセスを通して、subprocess
Pythonモジュールを使用して呼び出そうとしています。
subprocess.Popen(scala_run_command, stdout=subprocess.PIPE, shell=True)
問題は、いつでもpythonのプロセスが終了され、それだけで明示的にstty sane
コマンドを実行した後の生活に到来する、シェルがハングします。私の推測では、それはstaoutのためにscalaスクリプトがシェルに出力してシェルがハングするために引き起こされるということです(stdoutの何かがシェルの正気を失う原因になります)。
同じ理由で、スカラスクリプトの出力をデフォルトのログファイルに取り込もうとしましたが、これは複数の方法では起こっていないようです。
ので、クエリがどのようにシェルコマンドのstdout
出力はログファイルにsubprocess
モジュールを介して走っ取得するには、に沸きます。 subprocess, run
の代わりにこれを実現するより良い方法があるとしても、私はそのアイデアを知りたいと思っています。
現在のコードの状態は次のようになります。
__echo_command = 'echo ":load %s"'
__spark_console_command = 'spark;'
def run_scala_script(self, script):
echo_command = self.__echo_command % script
spark_console_command = self.__spark_console_command
echo_result = subprocess.run(echo_command, stdout=subprocess.PIPE, shell=True)
result = subprocess.run(spark_console_command, stdout=subprocess.PIPE, shell=True, input=echo_result.stdout)
logger.info('Scala script %s completed successfully' % script)
logger.info(result.stdout)
'shell = True'を削除してみませんか? –
このパラメータを削除しても実行されません.FileNotFoundErrorで失敗します。 – greperror
'shell = True'を削除し、' FileNotFoundError'をデバッグする必要があります。あなたは完全なパスを実行可能ファイルに渡していますか?あなたのコマンドの実際の内容を私たちに教えてください。 – senderle