import sys
sys.stdout.write('.')
Вы, возможно, также должны звонить
sys.stdout.flush()
для обеспечения stdout
, сразу сбрасывается.
Из Python 2.6 можно импортировать эти print
функция из Python 3:
from __future__ import print_function
Это позволяет Вам использовать решение Python 3 ниже.
В Python 3, print
оператор был изменен в функцию. В Python 3 можно вместо этого сделать:
print('.', end='')
Это также работает в Python 2, при условии, что Вы использовали from __future__ import print_function
.
, Если Вы испытываете затруднения буферизовать, можно сбросить вывод путем добавления flush=True
аргумент ключевого слова:
print('.', end='', flush=True)
Однако примечание, что flush
ключевое слово не доступно в версии print
функция, импортированная от [1 112] в Python 2; это только работает в Python 3, более конкретно 3.3 и позже. В более ранних версиях необходимо будет все еще сбросить вручную с вызовом к [1 113].
Ваш делегат приложения может реализовать сообщение
- (void)applicationWillTerminate:(NSNotification *)aNotification
и завершить NSTask там. Однако не гарантируется, что во время сбоя этот делегат будет вызван.
Два дополнительных шага, которые вы можете предпринять:
ОБНОВЛЕНИЕ: теперь, когда я пошел, чтобы проверить это как следует, это не работает. При попытке установить группу процессов возникает эта ошибка;
EPERM «Эффективный идентификатор пользователя запрошенного процесса отличается от идентификатора вызывающего процесса, и процесс не является потомком вызывающего процесса».
Существует более свежая ветка по этой проблеме, но, насколько я могу судить, нет простого решения
http://www.omnigroup.com/mailman/archive/macosx-dev/2009-March/062164. html
Я попробовал предложение Роберта Пойнтона о Cocoadev в своем приложении. Однако я еще не успел его протестировать.
http://www.cocoadev.com/index.pl?NSTaskTermination
Идея состоит в том, чтобы установить группу процессов задачи, которая должна быть такой же, как эта. процесса, запускающего задачу (примечание: приведенный ниже код в основном взят из потока выше).
pid_t group = setsid();
if (group == -1) {
group = getpgrp();
}
[task launch];
if (setpgid([task processIdentifier], group) == -1) {
NSLog(@"unable to put task into same group as self");
[task terminate];
} else {
// handle running task
}