有没有办法让python程序对打开的文件做出反应?例如,当我打开文本文件或其他python文件时,我可以让它做某事吗?
答案 0 :(得分:1)
简短的回答是否。
答案很长:这取决于你所说的“开放” - 但对于大多数合理的定义,在任何现代的macOS上,它都是可行的,但很难,并且可能在10.14或10.15中破解。
例如,假设您希望通过系统上的任何进程挂钩每个POSIX级别open
。 DTrace
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)
您可以使用inotify
,fswatch
(针对OSX)或watchdog
等工具获取有关创建,删除,修改和移动目录/文件的警报。但是,在一般情况下,我不知道如何在打开的文件上获取警报。你可能需要使用lsof
,或者做lsof为你做的事:扫描/proc/*/fs
- 轮询,而不是事件驱动的方法,这听起来像你想要的。