subprocess模块:使用call方法与tempfile对象

3 投票
2 回答
872 浏览
提问于 2025-04-15 12:31

我创建了一些临时的命名文件,使用的是tempfile库里的NamedTemporaryFile方法。

我已经往这些文件里写入了内容,并且刷新了缓存,但我没有关闭它们(否则文件可能会消失)。

我想用subprocess模块来调用一些命令行指令,使用这些生成的文件。

但是每次运行subprocess.call('cat %s' % f.name)时,都会失败,提示说这个命名的临时文件不存在。

而用os.path.exists(f.name)检查时,总是返回真。我可以直接在命令行中运行cat命令来查看这个文件。

请问有没有什么原因导致subprocess模块无法与临时文件一起使用?

有没有办法让它正常工作?

谢谢大家!

2 个回答

3

你为什么不在创建NamedTemporaryFile的时候加上可选参数delete=False呢?这样的话,你就可以放心地关闭这些临时文件,因为它们不会自动消失。之后你可以正常使用这些文件,等用完了再手动删除它们。这样做的话,所有操作在不同的系统上也都能正常运行。

1

你在使用子进程的时候,有没有选择shell=True这个选项?

撰写回答