gpt4 book ai didi

python - 为什么 Python 的 subprocess'popen 在 unix 和 windows 之间如此不同?

转载 作者:可可西里 更新时间:2023-11-01 11:49:39 25 4
gpt4 key购买 nike

我正在尝试用 Python 编写跨平台代码。该代码应该生成新的 shell 并运行代码。

这促使我查看 Python 的 subprocess 工具,尤其是它的 Popen 部分。所以我通读了这个类的文档 Popen doc并找到太多“如果在 Unix 上/如果在 Windows 上”语句。不是很跨平台,除非我误解了文档。

这是怎么回事?我知道这两个操作系统是不同的,但真的没有办法写一个通用的接口(interface)吗?我的意思是,“windows 与 unix 不同”的相同论点可以应用于 ossystem 等,它们似乎都是 100% 跨平台的。

最佳答案

问题在于进程管理是操作系统中根深蒂固的东西,不仅在实现上有很大差异,甚至在基本功能上也有很大差异。实际上通常很容易在 os 类中抽象代码。这两个 C 库,无论是 *nix 还是 Windows,都将读取文件作为 I/O 流来实现,因此您甚至可以编写在 Windows 和 *nix 中工作相同的相当低级别的文件操作函数。

但流程差异很大。例如,在 *nix 中,进程都是分层的,每个进程都有一个父进程,所有进程都返回到在 PID 1 下运行的 init 系统。一个新进程通过 fork 自身创建,检查它是父进程还是子进程,然后相应地继续.在 Windows 中,进程是严格非分层的,由 CreateProcess () 系统调用创建,为此您需要特殊权限。还有很多差异,这些只是两个例子,但我希望它表明实现平台独立进程库是一项非常艰巨的任务。

关于python - 为什么 Python 的 subprocess'popen 在 unix 和 windows 之间如此不同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33250232/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com