将数据从一个cli应用程序传递到另一个应用程序的最佳方式是什么?


What is the best way to pass data from one cli app to another

例如如何将数据从一个cli应用程序(例如Ruby脚本)传递到PHP脚本。我指的是原始数据、文本、二进制数据等等。因为使用临时文件的原始数据而产生的参数也有点蹩脚。我知道的最后一件事是stdin, stdout。也许有人知道更好的办法?

取决于这些程序是如何执行的(相对于彼此而言)。如果一个停止并启动另一个,stdin/out甚至转储文件可能会奏效(尽管它可能被认为是蹩脚的,但它确实有效!),如果有很多数据,您甚至可以考虑在SQLite之类的数据库中创建一个小数据库表。这还取决于数据之间传递的数据的易失性。

如果存在父/子进程关系,那么父进程启动子进程,您可以考虑管道/fifo,或共享内存或消息队列或任何其他形式的IPC。

你用的是什么操作系统?这在某种程度上决定了你能得到什么。您应该使用平台通用的内容。在*nix系统上,我们使用管道(|),套接字和数据文件,这取决于应用程序。

实际上没有一种方法可以做到这一点,这取决于应用程序的类型和数据的类型。

如果你要移动文本或CSV数据列,你可以使用管道或文本文件。

如果你在Ruby应用程序之间移动哈希值和对象,使用JSON或"马歇尔"数据和管道,套接字或文件。

如果你在语言之间移动数据,使用JSON, XML或YAML和其中一个数据路径。

我们经常使用JSON作为应用程序间的数据格式,并编写代码以允许它在设置命令行标志时发出JSON。这使得我们可以很容易地用一个小REST服务包装命令行应用程序,并远程调用它们,把它们的结果扔到web上。

话虽如此,并没有一个硬性的规则来规定如何做任何事情,只要与你的代码保持一致,并遵循你正在使用的应用程序的风格。