我正在嘗試在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