10

Python ドキュメントから:

さまざまな exec*() 関数は、プロセスにロードされた新しいプログラムの引数のリストを取ります。いずれの場合も、これらの引数の最初のものは、ユーザーがコマンド ラインで入力した引数としてではなく、独自の名前として新しいプログラムに渡されます。C プログラマの場合、これはプログラムの main() に渡される argv[0] です。たとえば、os.execv('/bin/echo', ['foo', 'bar']) は標準出力にバーのみを出力します。foo は無視されるようです。

誰かがこれを理解するのを手伝ってくれますか? いくつかのパラメーターを使用して独自のプログラムを実行したい場合は、どうすればよいですか?

4

1 に答える 1

21

これらすべての由来である UNIX ではexec、プログラムの実行可能ファイルをプログラム名から分離したため、プロセスに任意の名前を付けることができました。

最初の引数は実行するプログラムです。これは存在する必要があります。次の引数は、プログラムを実行しているプロセスが何と呼ばれるか、何が に含まれるかargv[0]ps(プロセス リスト) 出力に何が表示されるかです。

したがって、(C で、ただし Python にもマップされます):

execl ("/usr/bin/sleep", "notsleep", "60", NULL);

これによりプログラム/usr/bin/sleepが実行されますが、プロセス リストには として表示されnotsleepます。多くの場合、最初の 2 つのパラメーターは同一ですが、必須ではありませんargv[0]notsleepargv[1]

そのため、リストの最初の引数は (一見) 無視されます。プロセスに付ける名前であり、最初の引数ではありません。

それを行うためのより正しい方法は次のとおりです。

os.execv('/bin/echo', ['echo', 'foo', 'bar'])
于 2010-05-25T11:52:58.327 に答える