这是在本地Processing程序的上下文中进行的。我想运行一个外部程序来获取一些数据。有没有popen()或类似的函数可以使用?
发布于 2010-05-22 18:02:30
Process process = Runtime.getRuntime().exec("your command");然后,您可以使用Process流来读写数据。
发布于 2014-01-09 22:02:12
JDK5引入了ProcessBuilder来更好地控制流程生成。
Process process = new ProcessBuilder(command).start()请注意,forkAndExec在内部被调用,fork‘复制整个父进程地址空间’,因此,当父进程获得大量内存空间时,即使是一条很小的命令也可能导致OutOfMemoryErrors。
see here
发布于 2019-08-22 03:53:43
popen()的一个好朋友是创建一个命名管道作为输入和/或输出,就像在UNIX中一样:
mknod /tmp/mypipe.12345 p ; sort -o /tmp/mypipe.12345 /tmp/mypipe.12345 &然后打开/tmp/mypipe.12345,写入,关闭,打开/tmp/mypipe.12345,读取,关闭。由于在输入上执行EOF之前,排序不能写入任何内容,因此输出将在输入关闭后打开。popen()调用不能做到这一点!
对于更简单的场景,可以只读或写命名管道。
当然,您仍然需要将其派生出来,就像在system(...)调用中一样。
完成后,您希望删除命名管道。在某些UNIX系统上,/tmp在重新启动时被清除。
/tmp是共享的,因此很可能发生名称冲突。您可以在Java中生成一个部分随机的管道文件名(/tmp/mypipe.12345的数字部分),以防止出现这种情况。在某些系统中,Bash在/var/tmp中为每次使用<(...)或>(...)创建命名管道。不幸的是,要确定什么时候可以删除它们而不起作用(fuser?),这是一个挑战!
https://stackoverflow.com/questions/2887658
复制相似问题