从Python发出系统调用,获取输出的文件名

时间:2014-11-19 17:44:28

标签: python c pipe

我正在编写一个通过其C API调用库(GenomeTools)的Python程序。 GenomeTools中有一个函数,它将文件名作为输入,并在一次传递中处理文件的内容。

我想知道是否有一种方法可以从Python发出系统调用并让C函数处理系统调用的输出。当我想在Python中发出系统调用时,我通常使用subprocess模块,但这是不同的,因为C函数将文件名作为输入。有没有办法可以为系统调用的输出分配文件名?

1 个答案:

答案 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)