Python 3可以对我的mac上打开的文件做出反应吗?

时间:2018-05-02 19:55:21

标签: python python-3.x

有没有办法让python程序对打开的文件做出反应?例如,当我打开文本文件或其他python文件时,我可以让它做某事吗?

2 个答案:

答案 0 :(得分:1)

简短的回答是否。

答案很长:这取决于你所说的“开放” - 但对于大多数合理的定义,在任何现代的macOS上,它都是可行的,但很难,并且可能在10.14或10.15中破解。

例如,假设您希望通过系统上的任何进程挂钩每个POSIX级别openDTrace API提供了一种方法。但是如果你试图使用它:

$ sudo dtruss -t open_noncancel -f -p 1

...如果您使用的是10.9或更高版本,您会看到如下消息:

dtrace: system integrity protection is on, some features will not be available

然后,当有人打开一个文件时,你根本就什么也看不见,或者最多只看到一串错误:

dtrace: error on enabled probe ID 123 (ID 456: syscall::thread_selfid:entry): invalid user access in action #2 at DIF offset 0

您可以在此处或SIP (System Integrity Protection) Runtime Protection等各种第三方博文上阅读this one,但在最新版本的OS X中,基本上没有办法禁用它,除非在恢复模式下没有一些主要的hackery。

有没有办法绕过它?对于特定的有限用途,是的。虽然上面的dtruss命令不起作用,但您可以这样做:

$ sudo /usr/bin/filebyproc.d

甚至这个:

$ sudo dtrace -n 'syscall::open*:entry { printf("%s %s", execname, copyinstr(arg0)); }'

...您可以用执行Python脚本的代码替换printf,而不是尝试在subprocess中运行它并解析其输出。

获得输出...但不是所有进程。

在10.13上,所有被SIP特别列入黑名单的进程根本不会显示。沙盒应用程序 - 包括TextEdit等内容,以及您可以在App Store中安装的所有内容 - 只会在自己的沙箱中显示文件,而不是显式传递它们的文件。这使它变得不那么有用了。

一般来说,绕过它怎么样?那么,你基本上都在问如何编写rootkit。在SIP / Darwin / Mach中找到一些漏洞,做了很多复杂的工作来利用它,然后当10.14出现时,重新开始,因为Apple关闭了漏洞。

答案 1 :(得分:0)

您可以使用inotifyfswatch(针对OSX)或watchdog等工具获取有关创建,删除,修改和移动目录/文件的警报。但是,在一般情况下,我不知道如何在打开的文件上获取警报。你可能需要使用lsof,或者做lsof为你做的事:扫描/proc/*/fs - 轮询,而不是事件驱动的方法,这听起来像你想要的。