无法将文件句柄传递给子进程

时间:2017-08-07 21:49:51

标签: python python-3.x file

我使用echo "foo" > foo在当前目录中创建了一个文件。然后我尝试将该文件传递给subprocess.run,但我似乎误解了如何在Python中处理文件路径,因为我收到了错误。怎么了?

我的测试代码

with open('foo') as file:
    import subprocess
    subprocess.run(['cat',file])

产量

TypeError: expected str, bytes or os.PathLike object, not _io.TextIOWrapper

什么是PathLike对象?如何从open('foo')获取?我在哪里可以找到有关如何在Python中处理文件的更多信息?

2 个答案:

答案 0 :(得分:2)

首先无需打开文件。你可以简单地运行

import subprocess
subprocess.run(['cat', 'foo'])

cat命令由您的机器作为shell命令运行,因此您应该只能将文件名作为字符串传递。

Python根本不处理该文件。子进程的要点是将命令传递给底层系统(在本例中,显然是基于UNIX的操作系统)。您所做的只是将明文命令传递给命令行。

但是,我不会阻止您阅读有关文件处理的内容。查看this文档。

答案 1 :(得分:2)

PathLike对象:docs

如何从open来电return value

中获取

使用name字段

subprocess.run(['cat',file.name])

了解python文件:Reading and writing files