Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/287.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/django/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使NSLog与Python';使用PyObjC时使用的日志模块是什么?_Python_Django_Logging_Pyobjc_Nslog - Fatal编程技术网

如何使NSLog与Python';使用PyObjC时使用的日志模块是什么?

如何使NSLog与Python';使用PyObjC时使用的日志模块是什么?,python,django,logging,pyobjc,nslog,Python,Django,Logging,Pyobjc,Nslog,我正在编写一个基于Django的webapp,它通过PyObjC导入Cocoa框架。Cocoa框架中到处都是NSLog() 有没有什么简单的方法可以让NSLog的东西进入Pythonloggingmodule的世界,这样它就可以与实际Python代码发出的日志消息合并 做了一点谷歌搜索,看起来您可能不得不重定向stderr,并以某种方式将其吸回Python中,以实现这一点,这将是一种令人沮丧的 非常感谢您的帮助。根据佩奇的说法,NSLog的工作原理如下 fprintf(stderr, forma

我正在编写一个基于Django的webapp,它通过PyObjC导入Cocoa框架。Cocoa框架中到处都是
NSLog()

有没有什么简单的方法可以让NSLog的东西进入Python
logging
module的世界,这样它就可以与实际Python代码发出的日志消息合并

做了一点谷歌搜索,看起来您可能不得不重定向stderr,并以某种方式将其吸回Python中,以实现这一点,这将是一种令人沮丧的

非常感谢您的帮助。

根据佩奇的说法,NSLog的工作原理如下

fprintf(stderr, format_string, args ...);
因此,您确实需要捕获/重定向标准错误输出。我不久前写了一篇文章,这可能对纯Python程序有所帮助,但我想Cocoa代码可能会在封面下访问进程级文件描述符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代码和Cocoa代码输出的方法。

感谢Vinay的信息-我也这么怀疑。我将实现它,然后在这里发布我的实际解决方案,以便在它工作后将其合并到Python
日志中。值得一提的是,我最终的解决方案是实际停止使用NSLog(),并基于它编写我自己的日志宏,使用日志级别对应于logging.error,Python中的logging.debug等。消息缓冲起来,然后Python中的一个重复计时器按时间合并来自objc和本机Python的缓冲消息,并将它们发送到实际的日志文件。