我正在尝试用Python编写跨平台代码。该代码应生成新的shell并运行代码。
这使我着眼于Python的subprocess
工具,尤其是它的Popen
一部分。因此,我通读了此类Popen doc的文档,发现太多“如果在Unix上/如果在Windows上”的语句。不太跨平台,除非我误解了文档。
到底是怎么回事?我知道这两个操作系统是不同的,但实际上,没有办法编写一个公共接口吗?我的意思是,相同的参数“窗口比UNIX不同”可以适用于os
,system
等等,它们似乎都100%跨平台的。
问题在于,流程管理是操作系统中根深蒂固的东西,不仅在实现上有很大的不同,甚至在基本功能上也有很大的不同。实际上,例如在os类中抽象代码通常很容易。* nix或Windows这两个C库都将读取文件作为I / O流来实现,因此您甚至可以编写相当低级的文件操作功能,这些功能在Windows和* nix中均相同。
但是过程差别很大。例如,在* nix中,进程都是分层的,每个进程都有一个父进程,并且所有进程都返回在PID 1下运行的init系统。通过分叉自身,检查它是父进程还是子进程来创建一个新进程,然后继续进行相应操作。在Windows中,进程绝对是非分层的,并由CreateProcess()系统调用创建,为此您需要特殊的特权。还有很多不同之处,这些只是两个示例,但是我希望它表明实现独立于平台的进程库是一项非常艰巨的任务。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句