Python Can';t将文件句柄传递给子进程

Python Can';t将文件句柄传递给子进程,python,python-3.x,file,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.Te

我用
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

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

首先不需要打开文件。你可以直接跑

import subprocess
subprocess.run(['cat', 'foo'])
计算机正在以shell命令的形式运行
cat
命令,因此您应该能够以字符串的形式传递文件名

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

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

类路径对象:

如何从电话中获取:

使用
名称
字段

subprocess.run(['cat',file.name])
了解python文件:

它需要类似字符串或
路径的对象。只要把它传给“foo”
。你为什么要打开文件呢?与“类似路径”不同的是,有一个所谓的路径(就像你试图传递给
subprocess.run()的路径)。简而言之,这些文件句柄允许您使用
read()
write()
等方法从Python内部对文件(或流)进行操作。