Python的StringIO是否可以获得文件描述符?

3
从一个Python脚本中,我想把一些小的字符串数据传递给一个子进程,但该子进程只接受文件名作为参数并打开并读取该文件,这是不可更改的。 我不想将这些数据写入磁盘,它只应驻留在内存中。
我的第一反应是使用StringIO,但我意识到StringIO没有fileno()。 mmap(-1, ...)似乎也不会创建文件描述符。 前面两种方法都行不通,我不知道该如何做。 这是否可行? 文件描述符将在操作系统级别可见,但(我希望)仅对该进程的子进程可见。
简而言之,如何为Python字符串/内存创建私有文件描述符,只有子进程可以访问?
附:这全部在Linux上进行,并且不需要任何移植性。

你可以使用管道吗? - Mad Physicist
1
子进程是否也坚持要映射文件?如果不是,请将/dev/stdin作为文件名提供给它,并将数据馈送到子进程的stdin - user4815162342
1
你的Linux系统肯定至少挂载了一个tmpfs(RAM磁盘)文件系统 - 可能是/tmp或/var/run。在那里写入你的文件,大家都会很高兴。 - jasonharper
@user4815162342 谢谢!我之前不知道/dev/stdin,但是通过PIPE和Popen.communicate它正好按照我的期望工作了。 - qdbp
1个回答

2

将@user4815162342的评论具体化为答案:

直接的方法是:

  • /dev/stdin作为文件参数传递给进程;
  • 使用stdin=subprocess.PIPE
  • 最后,使用Popen.communicate(<您的输入>)来提供所需的内容。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接