1. ホーム
  2. python

[解決済み] pythonのos.execl()とos.execv()の違いについて

2022-02-16 16:27:22

質問

pythonのos.execl()とos.execv()には違いがあるのでしょうか?私は使用していた

os.execl(python, python, *sys.argv) 

をクリックして、スクリプトを再起動します ( ここで ). しかし、前のスクリプトが去ったところから始まるようです。

スクリプトを再起動したときに、最初から始まるようにしたいのですが。どうすればいいでしょうか。

os.execv(__file__,sys.argv)

は、仕事をするのですか? コマンドとアイデアはここから。 Pythonのヘルプやドキュメントを見ても、両者の違いは分かりませんでした。クリーンリスタートを行う方法はありますか?

私がやろうとしていることのもう少し詳しい背景は、以下をご覧ください。 その他の質問

どのように解決するのですか?

低レベルでは、実行中のプロセスイメージを新しいプロセスで置き換えるという同じことを行います。

のみ との違いは execvexecl は引数の取り方です。 execv は単一の引数リスト (その最初の引数は実行ファイル名) を期待するのに対し execl は可変の引数リストを想定しています。

このように、要するに execv(file, args) とは全く同じです。 execl(file, *args) .


注意点 sys.argv[0] はすでにスクリプト名です。しかし、これは Python に渡されたスクリプト名であり、プログラムが実行されている実際のスクリプト名とは異なる場合があります。正確かつ安全にするために、引数リストを exec* は、次のようになります。

['python', __file__] + sys.argv[1:]

というリスタートスクリプトをテストしたところです。

os.execl(sys.executable, 'python', __file__, *sys.argv[1:])

で、これは問題なく動作します。からのエラーを無視したり、黙ってキャッチしたりしていないことを確認してください。 execl - もし、実行に失敗したら、「中断したところから続ける」ことになります。