Първи параметър на os.exec*

От документите на python:

Различните функции 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