如果您对“类文件对象”感到满意,则上述答案有效,其中StringIO
类的对象只是一种特殊情况。然而,StringIO
类的实例并不是Python 中使用的严格意义上的“文件对象”(即与内置open
函数返回的内容相同的类型)。
例如,StringIO
对象没有fileno
方法,故意省略了方法:
fileno() 未实现,因此使用它的代码会提前触发异常。
一个可能是严格的“文件对象”而不仅仅是“类文件对象”的原因有几个。如上所说,
使用真实文件通常更快(但不太方便)。
另一个原因是“类文件”对象(如类的对象StringIO
)不能用作 of 的参数的参数stdin
,这是我在 Google 上找到这个问题时想到的用例。这是因为,在 Python 3.7 的第 1324 行(定义使用的模块)中,该方法尝试定义变量,这显然只有在首先具有方法时才有效。因此,真正的“文件对象”和“类文件对象”(如类的实例)之间的区别不仅仅是毫无意义的迂腐。create_subprocess_exec
asyncio.subprocess
subprocess.py
subprocess
asyncio.subprocess
_get_handles
p2cread = stdin.fileno()
stdin
fileno
StringIO
以下不是一个理想的解决方案,但适用于我的目的:
def string_to_file(string):
file_object = open('temporary_file.temporary', 'w')
file_object.write(string)
file_object.flush()
return file_object
另一方面,它不适用于您的目的,因为它写入磁盘。这可能会起作用:
def string_to_file(string):
import tempfile
file_like_object = tempfile.NamedTemporaryFile()
file_like_object.write(string.encode())
file_like_object.flush()
return file_like_object
两者都适用于传递到create_subprocess_exec
.