少し不安定で、時々SSLエラーを引き起こすPythonスクリプトがあります。一部のライブラリに深く埋め込まれた一部の関数によって例外が発生するため、デフォルトでは回避策はありません。
私は何度も実行されるwhileループを使用してシェルスクリプトを生成し、ループ内でPythonスクリプトを実行してハッキーソリューションを実装しました。
今私が望むのは、ループ反復が開始され、スクリプトが実行されたときにPythonスクリプトが失敗し、ループの次の反復がスクリプトを再実行するまで、シェルスクリプト内のループが元の場所に保持されることです。 。
これは効率的ですか?もっと良い方法がありますか?最も重要なことは正しいですか?
ベストアンサー1
存在する:
cmd1
cmd2
または
cmd1; cmd2
順次実行されます。
存在する
cmd1 && cmd2
または
cmd1 || cmd2
順番に実行されますが、cmd2
実行されるかどうかは完全にcmd1
成功(for &&
)または失敗(for ||
)によって異なります。
存在する
cmd1 | cmd2
または
cmd1 & cmd2
cmd1 |& cmd2 # ksh
coproc cmd1; cmd2 # bash/zsh
または
cmd1 <(cmd2) # ksh/zsh/bash (also yash though with a different meaning)
同時に実行されます。最初のケースでは、一部のシェルは残りのスクリプトを続行する前にのみ待機しcmd2
、他のシェルは両方のスクリプトを待機します。 2番目のケースでは、シェルは待機しますcmd2
(cmd1
非同期的に実行されるといいます(またはインタラクティブシェルで実行されている場合はバックグラウンドで実行されます))。一方、3番目のケースではcmd1
(cmd2
非同期的に)実行されます。
存在する:
< "$(cmd1)" x=$(cmd2) y=$(cmd3) cmd4 "$(cmd5)" > "$(cmd6)"
コマンドは順次実行されますが、順序はシェルによって異なります。とにかくcmd4
最後に実行されます。
存在する:
cmd1 =(cmd2) # zsh
順番に(まず)実行されますcmd2
。
これらのすべてのケースでは、これらのコマンドは他のプロセスを開始できます。シェルはこれについて知らないので、それを待つことは不可能です。