2

我发誓我什么都没改变,这在一周前还有效。然而现在每次我用 os.system 或 subprocess.call 调用路径时,我都会收到错误“错误:文件 NBK.swn 不存在”。

这是我的代码:

import subprocess 
subprocess.call('"H:/2012/yada yada yada/swanrun" NBK')

为了让它正常运行,我在 H:/2012/yada yada yada/ 中打开命令提示符并输入“swanrun NBK”,它工作正常。如果我运行相同的代码,但删除最后的“NBK”,即 swanrun 应该运行的文件,swanrun 成功运行,但当然不知道要运行哪个文件。请帮忙!

4

2 回答 2

1

Subprocess 需要一个列表,而不是字符串。如果您只提供一个字符串,它会将整个内容视为可执行名称,并且不会将其拆分为空格。它试图找到一个名为“H:/2012/yada yada yada/swanrun”NBK 的程序,该程序将是一个具有该标题的文件。而是尝试subprocess.call(['"H:/2012/yada/yada yada/swanrun"', 'NBK'])使用参数“NBK”加载程序“H:/2012/yada/yada yada/swanrun”。

于 2012-11-03T02:26:42.870 回答
1

使用完整路径"NBK",或设置当前工作目录:

import subprocess 

path = "H:/2012/yada yada yada/"
subprocess.call('"H:/2012/yada yada yada/swanrun" NBK', cwd=path)

编辑:通常,如果文件参数不是完全限定的路径,应用程序将在其预定义的数据目录(如果有)、可执行文件的目录、当前工作目录或相对于当前工作目录或可执行文件的某个目录中查找目录。该cwd选项设置工作目录,您应该将其设置为您可以从中swanrun NBK成功运行“”的目录,如您的问题中所述。

于 2012-11-01T00:43:47.450 回答