【问题标题】:python subprocess file does not existpython子进程文件不存在
【发布时间】:2012-10-21 13:57:28
【问题描述】:

我发誓我没有改变任何东西,这在一周前还有效。然而现在每次我用 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 成功运行,但当然不知道要运行哪个文件。请帮忙!

【问题讨论】:

  • NBK_local.swn在什么目录下?
  • 抱歉打错了,错误是“错误:文件 NBK.swn 不存在”。 NBK.swn存在于H:/2012/yada yada yada/

标签: python operating-system subprocess execute os.system


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

    • 不幸的是,这并没有解决问题(结果相同)。但是,您正在做一些事情,因为我能够确定问题在于它没有在输入文件 (NBK.swn) 的正确位置中查找。我最终使用了一种解决方法,使用 shutil 将输入文件复制到工作目录,然后将输出从工作目录复制回输入文件目录。不优雅,但它有效。如果有人有适当的解决方案,我仍然全神贯注!谢谢!
    • 我只是提供了一个示例路径。将工作目录更改为 NBK.swn 的路径,或使用文件的完整路径作为参数。 IMO,复制文件不是解决方案。
    • 我确实改变了路径。事实上,我使用的路径 (.../yada yada yada/) 是为了保护我正在处理的内容的隐私。仍然没有工作(除了我的解决方法,它完成了工作)。不过谢谢;如果有人有任何其他建议,仍然有兴趣。
    猜你喜欢
    • 2019-12-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-04
    • 2016-03-05
    相关资源
    最近更新 更多