2015-09-22 3 views
-1

У меня есть скрипт Python, который вызывается с несколькими аргументами. Я также могу назвать это с различным набором аргументов, чтобы вести себя по-другому.Python скрипт, который вызывает себя

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

Причина для выше: При вызове с набором аргументов 1 скрипт создает библиотеку C. При вызове с аргументом set 2 скрипт запускает сборку dll из набора arg 1. Однако я обнаружил, что для работы с аргументом set 2 также требуется, чтобы один из файлов C (который строит dll) имел абсолютные пути (он имеет относительный). Запустив скрипт python с аргументом 2, я временно изменил файл на файл C относительно абсолютных путей и запустил, но это означает, что скрипт не синхронизирован с dll. поэтому мне нужно вызвать скрипт со вторым набором аргументов, в этом есть код, который снова вызовет тот же скрипт с первым набором аргументов для сборки dll, а затем продолжит работу дальше.
Благодаря
Sedy

+0

Конечно, просто проверить аргументы и делать все, что вы хотите, соответственно. Но почему вы хотите создать новый процесс? Вы не можете просто вызвать другую функцию внутри скрипта? – multivac

+0

Именованные или необязательные параметры могут быть полезны, когда вы хотите узнать, какие аргументы (и не были) переданы в функцию. http://www.diveintopython.net/power_of_introspection/optional_arguments.html – ziddarth

ответ

1

Отъезд subprocess module.

from subprocess import call 
if arg2: 
    call(["python", "myscript.py", "--arg1"]) 
+0

работает как очарование ... Спасибо – user915783

0

Изменение argumemts не будет иметь никаких побочных эффектов на функцию, его так же, как любой инструкции.

Должно работать. Это намного легче, чем вы боитесь. Сделайте это сейчас, это весело.

* Рядом с args означает «взять остальные параметры и положить их в список, называемый args».

def wrapper(func, *args): 
    func(*args) 

def func1(x): 
    print(x) 

def func2(x, y, z): 
    print x+y+z 

wrapper(func1, 1) 
wrapper(func2, 1, 2, 3) 
Смежные вопросы