我正在尝试在Python中编写跨平台代码。代码应该产生新的shell并运行代码。为什么Python的子进程在unix和windows之间变得如此不同?
这导致我看一下Python的工具subprocess
,尤其是其Popen
一部分。所以我阅读了这个类Popen doc的文档,并发现太多“如果在Unix上/如果在Windows上”语句。除非我误解了文档,否则不是非常跨平台的。
这是怎么回事?我明白这两个操作系统是不同的,但真的,没有办法编写一个通用接口?我的意思是,“windows与unix不同”的相同论点可以应用于os
,system
等,并且它们看起来都是100%跨平台的。
谢谢,不知道这个! – denvar
+1。为了补充一点,可能是Windows和Linux之间最重要的区别(就实现用于进程管理的库API而言)是参数传递给孩子的方式。 Windows传递代表整个命令行的单个字符串,而Linux传递代表单个参数的字符串数组。这听起来可能不是什么大问题,但如果任何参数包含特殊字符都可以。程序员经常被这个问题困扰。 –
调用'CreateProcess'不需要特殊的权限,除非你正在谈论运行需要提升的进程(根据完整性级别和访问令牌中已启用的组)。 'appinfo'服务提供对高架访问令牌的访问。通常,您可以使用带有“runas”动词的ShellExecute [Ex]来访问此服务。 Python的标准库通过'os.startfile'对此只有极小的支持。如果程序表现为需要提升,则可以使用'shell = True'的'Popen'。否则需要ctypes或PyWin32。 – eryksun