首页 / JAVA / 从Java执行未标记的命令行
从Java执行未标记的命令行
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了从Java执行未标记的命令行,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1292字,纯文字阅读大概需要2分钟。
内容图文
![从Java执行未标记的命令行](/upload/InfoBanner/zyjiaocheng/690/c8fcb11541cc4d6ea250f3ae336f1aea.jpg)
我目前正在使用ProcessBuilder从Java服务器运行命令.该服务器将替换旧的Perl服务器,我们的许多旧代码指定了平台特定的命令行.
例如,在Windows上它可能会执行以下操作:
command -option "hello world"
在Unix上,它可能会做:
command -option 'hello world'
问题在于ProcessBuilder和Runtime.exec都采用标记化的命令行(例如,对于Unix和Windows,{{command“,”-option“,” hello world“}).
虽然我更喜欢平台独立的方式,但是我们的代码库中有大约3000万行perl代码.如果没有我为不同平台编写令牌生成器(实际上没什么大不了的,我只是不想创建WTF),有没有办法让操作系统上的Shell令牌化命令行?
解决方法:
您是否能够使用带单个String并将其作为整个命令运行的重载Runtime.exec(String)?
以下在Windows上对我有用:
Process p = Runtime.getRuntime().exec("perl -e \"print 5\"");
System.out.println(IOUtils.toString(p.getInputStream()));
p.destroy();
这或多或少是Runtime.exec(String)在做什么:
public static void main(String [] args) throws Exception {
Process p = new ProcessBuilder(getCommand("perl -e \"print 5\"")).start();
System.out.println(IOUtils.toString(p.getInputStream()));
p.destroy();
}
private static String[] getCommand(String input) {
StringTokenizer tokenizer = new StringTokenizer(input);
String[] result = new String[tokenizer.countTokens()];
for (int i = 0; tokenizer.hasMoreTokens(); i++) {
result[i] = tokenizer.nextToken();
}
return result;
}
内容总结
以上是互联网集市为您收集整理的从Java执行未标记的命令行全部内容,希望文章能够帮你解决从Java执行未标记的命令行所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。