Python 子流程模块:对tempfile对象使用call方法

Python 子流程模块:对tempfile对象使用call方法,python,subprocess,Python,Subprocess,我使用tempfile库NamedTemporaryFile方法创建了临时命名文件。 我已经写信给他们刷新了缓冲区,但我没有关闭它们(否则它们可能会消失) 我试图使用子流程模块使用这些生成的文件调用一些shell命令 subprocess.call('cat%s'%f.name)总是说指定的临时文件不存在而失败 os.path.exists(f.name)始终返回true。 我可以直接从shell对文件运行cat命令 子流程模块无法处理临时文件是否有某种原因 有什么办法使它起作用吗 提前感谢。您

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

我试图使用
子流程
模块使用这些生成的文件调用一些shell命令

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

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

子流程
模块无法处理临时文件是否有某种原因

有什么办法使它起作用吗


提前感谢。

您是否对子流程使用shell=True选项?

为什么不使用可选参数
delete=False
将您的
命名为临时文件
s?这样,您就可以在知道它们不会消失的情况下安全地关闭它们,然后正常使用它们,并在完成后显式地取消它们的链接。通过这种方式,所有东西也可以跨平台工作。

我没有使用shell=True,所以我改为使用它。现在出现的错误是,“/bin/sh:没有这样的文件或目录”,这些文件也没有被删除。我可以在终端中打开另一个选项卡,然后对文件进行分类。正如我所说,os.path.exists仍然表示文件在那里。这与子流程模块有关。我很愚蠢,将shell设置为true修复了错误,但还有另一个文件未找到错误,而该文件实际上不存在。