Первый параметр os.exec*

Из документации по питону:

Различные функции exec*() принимают список аргументов новой программы, загруженной в процесс. В каждом случае первый из этих аргументов передается новой программе как ее собственное имя, а не как аргумент, который пользователь может ввести в командной строке. Для программиста на C это argv[0], передаваемый функции main() программы. Например, os.execv('/bin/echo', ['foo', 'bar']) будет печатать только строку на стандартном выводе; foo будет игнорироваться.

Может кто-нибудь, пожалуйста, помогите мне понять это? Что мне нужно сделать, если я хочу запустить свою программу с некоторыми параметрами?


person R S    schedule 25.05.2010    source источник


Ответы (1)


UNIX, откуда все эти exec вещи, отделил исполняемый файл программы от имени программы, так что ваш процесс может иметь любое произвольное имя.

Первый аргумент — это программа, которая будет запущена. Это должно существовать. Следующий аргумент - это то, как будет называться ваш процесс, выполняющий программу, что будет в argv[0] и что появится в выводе ps (список процессов).

Итак, если бы я это сделал (на C, но это также отображается на Python):

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

Это запустит программу /usr/bin/sleep, но она будет отображаться в списке процессов как notsleep. argv[0] будет notsleep, а argv[1] (фактический аргумент) будет 60. Часто первые два параметра будут идентичными, но это ни в коем случае не обязательно.

Вот почему первый аргумент вашего списка (по-видимому) игнорируется. Это имя процесса, не его первый аргумент.

Более правильный способ сделать это:

os.execv('/bin/echo', ['echo', 'foo', 'bar'])
person paxdiablo    schedule 25.05.2010