Используйте subprocess.check_call , передайте список аргументов, и вы можете добавить переменную где угодно:
from subprocess import check_call
check_call(["shutdown", some_var ,"-s", "-t" "10", "-c"])
Селекторный оператор позволяет обращаться к методу, предоставленному объектом, несколько подобным указателю функции в C. Это полезно, потому что это позволяет Вам отделять процесс вызывающих методов для объекта. Например, одна часть кода могла предоставить метод, и другая часть кода могла применить тот метод к данному набору объектов.
Примеры:
Тест, чтобы видеть, реализует ли объект определенный метод:
[object respondsToSelector:@selector(methodName)]
Хранилище метод для позже обращения к объекту;
SEL method = @selector(methodName);
[object performSelector:method];
Вызов метод на другом потоке (полезный для работы GUI).
[object performSelectorOnMainThread:@selector(methodName)]
В дополнение к тому, что было сказано, вы можете также обернуть @selector в NSInvocation для дальнейшего использования. Вы можете установить аргументы для NSInvocation в течение длительного времени после его создания и активировать его, когда вам нужно, чтобы сообщение было запущено. Это дает вам много силы.
Для введения в концепцию, Скотт Стивенсон имеет отличный пост под названием «Динамическая цель-C с NSInvocation» .
@selector()
используется каждый раз, когда необходимо передать название метода как аргумент другому методу, функции или как значение переменной. Передача непосредственно имени не работает в цели-C.
Вы можете использовать селектор для вызова метода объекта - это обеспечивает основу для реализации шаблона проектирования целевого действия в Какао.
[myObject performSelector:@selector(runMYmethod:) withObject:parameters];
эквивалентно:
[myObject runMYmethod:parameters];
Одним из практических примеров является метод validateMenuItem , в котором пункты меню идентифицируются с их целевыми действиями.
Упрощенный пример:
- (BOOL)validateMenuItem:(NSMenuItem *)item {
if ([item action] == @selector(selectFiles:) && otherCondition) {
return YES;
} else {
return NO;
}
}