我正在编写一个通过其C API调用库(GenomeTools)的Python程序。 GenomeTools中有一个函数,它将文件名作为输入,并在一次传递中处理文件的内容。
我想知道是否有一种方法可以从Python发出系统调用并让C函数处理系统调用的输出。当我想在Python中发出系统调用时,我通常使用subprocess
模块,但这是不同的,因为C函数将文件名作为输入。有没有办法可以为系统调用的输出分配文件名?
答案 0 :(得分:2)
您可以将系统调用输出传递给临时文件,然后将其文件名用于C调用。很幸运,你甚至在将文件从RAM缓存中移出到磁盘之前就删除了文件。
import tempfile
import subprocess as subp
import os
tempfp = tempfile.NamedTemporaryFile(delete=False)
try:
proc = subp.Popen(['somecommand'], stdout=tempfp)
tempfp.close()
proc.wait()
some_c_function(tempfp.name)
finally:
tempfp.close()
os.remove(tempfp.name)