【问题标题】:subprocess module: using the call method with tempfile objectssubprocess 模块:使用带有 tempfile 对象的 call 方法
【发布时间】:2009-06-26 15:10:42
【问题描述】:

我使用临时文件库 NamedTemporaryFile 方法创建了临时命名文件。 我已经写信给他们刷新了缓冲区,我还没有关闭它们(否则它们可能会消失)

我正在尝试使用 subprocess 模块来使用这些生成的文件调用一些 shell 命令。

subprocess.call('cat %s' % f.name) 总是失败,说指定的临时文件不存在。

os.path.exists(f.name) 总是返回 true。 我可以直接从 shell 对文件运行 cat 命令。

subprocess 模块无法处理临时文件是否有某些原因?

有没有办法让它工作?

提前致谢。

【问题讨论】:

  • 我没有使用 shell=True 所以我改成了它。现在出现错误说,'/bin/sh:没有这样的文件或目录'
  • 文件也没有被删除。我可以在我的终端中打开另一个选项卡并很好地分类文件。就像我说的, os.path.exists 仍然说文件在那里。这与子流程模块有关。

标签: python subprocess


【解决方案1】:

为什么不使用可选参数delete=False 创建NamedTemporaryFiles?这样您就可以安全地关闭它们,知道它们不会消失,之后正常使用它们,并在完成后明确取消链接。这样一来,一切都可以跨平台运行。

【讨论】:

    【解决方案2】:

    您是否在子进程中使用 shell=True 选项?

    【讨论】:

    • 我是愚蠢的,将 shell 设置为 true 修复了错误,但出现另一个文件未找到错误,该文件实际上不存在。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-05-14
    • 1970-01-01
    • 2015-09-23
    • 2016-04-07
    • 2018-07-09
    • 2020-05-02
    • 2014-09-30
    相关资源
    最近更新 更多