我正在尝试用Python编写跨平台代码。代码应该生成新的shell并运行代码。
这让我看看Python的subprocess
工具,特别是它的Popen
部分。所以我仔细阅读了这个类Popen doc的文档,并找到了太多“if on Unix / if on Windows”语句。不是非常跨平台,除非我误解了文档。
发生了什么事?据我所知,这两个操作系统是不同的,但实际上,没有办法编写通用接口?我的意思是,相同的参数“windows不同于unix”可以应用于os
,system
等,它们看起来都是100%跨平台的。
答案 0 :(得分:2)
问题在于,流程管理是操作系统中深深扎根的东西,不仅在实现方面有很大差异,而且甚至在基本功能方面也有很大差异。 实际上,在os类中抽象代码通常很容易。两个C库,无论是* nix还是Windows,都将读取文件作为I / O流实现,因此您甚至可以编写相当低级别的文件操作函数,这些函数在Windows和* nix中的工作方式相同。
但是流程差别很大。在* nix中,例如进程都是分层的,每个进程都有一个父进程,所有进程都返回到在PID 1下运行的init系统。一个新进程通过分叉自己创建,检查它是父进程还是子进程然后继续。 在Windows中,进程严格是非分层的,并且由CreateProcess()系统调用创建,您需要特殊权限。 还有很多差异,这些只是两个例子,但我希望它表明实现一个独立于平台的流程库是一项非常艰巨的任务。