您的代码中至少有两个问题:
call(["net", "use", ":q", '"http://na.com/DMP/DMP/programming/"'])
首先,你有":q"
你的意思"q:"
。这可能会导致net
命令解释:q
为您的网络位置而不是目标驱动器,这可能会导致错误 67。
其次,您在 URL 周围有一组额外的引号:'"http://na.com/DMP/DMP/programming/"'
您应该在哪里使用'http://na.com/DMP/DMP/programming/'
. 当subprocess
构建要传递给的字符串时CreateProcess
,它已经引用了您的每个参数。所以,如果你自己引用它们,你最终会用双引号来引用参数。在某些情况下,这在 Windows 中实际上是不可能的,所以你最终会得到垃圾,但我认为这里不是这种情况。您将成功地将这个带引号的字符串获取到net
,告诉它您要打开以协议开头的相对路径"http:
或带有协议的 URL "http
,或类似的东西。不管它是什么,它都不是可用的网络位置,这很可能会导致错误 67。
正如 Ben 指出的那样,您的system
调用存在类似的问题——您在整个字符串周围添加了一对额外的引号。如果你真的想弄清楚,这可能是有原因的……但我认为你不想弄清楚。就当做“我做错事,但我很幸运”,以后不要那样做。
最后,正如文档所说:
在 Windows 上,将 args 序列转换为可以解析的字符串
这意味着,如果您已经有一个适用于 Windows 的命令行,则最好将其用作字符串,而不是尝试将其分解为一个序列以subprocess
进行重新组合。
(请记住,这仅适用于 Windows!在其他平台上,不是构建命令行字符串以传递给CreateProcess
系列中的函数,而是构建字符串subprocess
数组以传递给exec
系列中的函数。)
所以,只需这样做:
call("net use g: http://na.com/DMP/DMP/programming/")