【发布时间】:2011-09-08 06:10:30
【问题描述】:
我之前使用过 cshell/tcshell,然后转向 python。
现在我要将我所有的 shell 脚本、gui、数据库、网页集成在一起。 Python 擅长大部分工作,但在 GUI、一般性能和第三部分库方面相对较弱。
所以我打算尝试将 java 作为我的主要开发语言。是否擅长shell交互编程、过程控制等?
非常感谢。
【问题讨论】:
我之前使用过 cshell/tcshell,然后转向 python。
现在我要将我所有的 shell 脚本、gui、数据库、网页集成在一起。 Python 擅长大部分工作,但在 GUI、一般性能和第三部分库方面相对较弱。
所以我打算尝试将 java 作为我的主要开发语言。是否擅长shell交互编程、过程控制等?
非常感谢。
【问题讨论】:
Java 本身可能不是最好的 shell 语言,因为启动时间慢,缺乏与操作系统、命令和文件一起使用的内置库(我的意思是,甚至无法将文件复制到Java 没有求助于创建两个输入和输出流并管道传输数据,哎呀!)。
但是!有很多基于 JVM 的语言,如 JRuby(ruby)、Rhino(javascript)、Jython(python)、Groovy 或Grash、Bean-shell 等,它们的工作方式类似于 shell 语言,并且可以运行其他 Java 编写的程序.我建议您查看Grash,这可能正是您所需要的。
其中一些语言甚至有一种方法可以预加载 JVM 运行时以加快启动时间(例如 JRuby 的 Nailgun),从而可以解决启动时间缓慢的问题。另请参阅 this post 以了解使用 Ruby(JRuby) 作为 shell 语言。
【讨论】:
FileChannel.transferTo。无论哪种方式,shell 脚本的主要问题是 JVM 启动需要相当长的时间。不过,罪魁祸首当然是磁盘。
FileChannel.transferTo 也好不到哪里去。您仍然必须为源文件和目标文件创建两个文件句柄并手动循环它以传输数据。对于像复制这样简单的事情,这是很多代码。将其与一行比较:FileUtils.copyFile(file1, file2) 使用 apache 的 commons.io 库。启动时间很慢,但是,正如我所提到的,您可以使用 Nailgun 来解决这个问题,它可以预加载 JVM 一次,并允许您在每次启动程序时重用它。 Nailgun 应该适用于任何基于 JVM 的语言。
如果您想将 Java 平台用作脚本语言,请查看 Groovy。
【讨论】:
启动 JVM 通常很慢并且会占用大量内存(与本机应用程序相比) 因此,它不适合运行许多(并行)经常启动和终止的小型应用程序(进程)。 ...如果这是你的意图
【讨论】:
我编写了 jpad 以允许运行 java“shell 脚本”和交互式 sn-ps,同时还提供了很好的结果可视化。这说明了我的意思:
要使用它作为脚本语言来复制文件,您可以使用: http://jpad.io/example/1I/fileio
final File file = new File("outt.csv");
Object o = new int[] {1,2,3};
JPad.writeCsv(o, file);
java.nio.file.Files.copy(file.toPath(), Paths.get("copy.csv"));
你也可以从命令行运行:
> more fileio.jpad
final File file = new File("outt.csv");
Object o = new int[] {1,2,3};
JPad.writeCsv(o, file);
java.nio.file.Files.copy(file.toPath(), Paths.get("copy.csv"));
> jpad fileio.jpad
> dir
29/04/2017 13:30 <DIR> .
29/04/2017 13:30 <DIR> ..
29/04/2017 13:30 16 copy.csv
29/04/2017 13:30 160 fileio.jpad
29/04/2017 13:30 16 outt.csv
【讨论】: