在Python子进程中多次调用/dev/stdin (*nix)
我有一个 Python 的子进程调用,我想连接三个管道(两个标准输入和一个标准输出)。我知道只有一个 /dev/stdin,但 /dev 目录下还有很多我不知道的设备,我也不知道 Python 的 os、sys 或 subprocess 模块有没有办法用这些设备的路径来调用 subprocess.Popen。
我之所以这样问,是因为我想从一个 mysql 数据库或者 tar 压缩包中获取信息,而不是从我现在有的一个包含超过 28,000 个目录的目录结构中获取。仅仅是目录名称就占用了很多空间!另一种选择是将整个目录结构打包成 tar 文件并通过压缩包来操作。无论是用 mysql 还是 tar,我都希望能在 subprocess.Popen 中有两个输入管道和一个输出管道,这样我就可以绕过硬盘。
需要举个例子吗??
1 个回答
3
在Unix系统中,有一个很方便的替代方案,就是使用一个叫做命名管道的东西。它看起来像一个文件,但实际上在磁盘上并不占用空间;你可以用一个进程写入数据,然后用另一个进程读取,就像使用管道一样。你的子进程可以像平常一样进行文件输入输出;Unix(比如Mac OS或Linux)会为你处理复杂的部分。
% mkfifo foo
% cat giantFile > foo &
[1] 4667
% wc -l foo
100