Согласно этой странице NSLog в основном работает как
fprintf(stderr, format_string, args ...);
, поэтому вам нужно перехватить / перенаправить стандартный вывод ошибок.Некоторое время назад я написал сообщение , которое могло бы помочь программам только на Python, но я предполагаю, что код Какао получает доступ к дескриптору файла 2 уровня процесса (stderr
) под прикрытием.Так что вам нужно немного поиграться с процессом 'stderr
.Вот пример:
old_stderr = os.dup(sys.stderr.fileno()) # keep a copy
fd = os.open('path/to/mylog', os.O_CREAT | os.O_WRONLY)
os.dup2(fd, sys.stderr.fileno())
# Now, stderr output, including NSLog output, should go to 'path/to/mylog'
...
os.dup2(old_stderr, sys.stderr.fileno())
#stderr restored to its old state
Когда у вас есть fd
, вы можете создать из него файлоподобный объект и передать его, например, StreamHandler
в качестве средства объединения выходных данных изКод Python и код Какао.