我需要一个“系统”函数调用,与Python,Perl,PHP,Ruby和&c相同。当它在Rhino JavaScript引擎上运行时,它将成为名为Narwhal的JavaScript标准库的组件,而Rhino JavaScript引擎又在Java上运行。
问题在于Java的标准库似乎已经抽象出了生成共享父进程的stdio的子进程的能力。这意味着您不能将交互性推迟到子流程中。
我的第一个建议是实现Python的subprocess.popen。这使用三个“pumper”线程独立地主动复制父进程的stdio(以防止死锁)。不幸的是,这给我们带来了两个问题。首先,当子流程自愿退出时,输入不会自动关闭。其次,子进程的流无法正确缓冲和刷新。
我正在寻找可以使我们的require(“os”)。system()命令正常工作的解决方案。
该项目位于http://narwhaljs.org
相关代码:
最佳答案
不确定这是否是您要查找的内容,但是可以通过JNA library调用C system
函数:
public class System {
public interface C extends Library {
C INSTANCE = (C) Native.loadLibrary(
(Platform.isWindows() ? "msvcrt" : "c"), C.class);
public int system(String format);
}
public static void main(String[] args) {
C.INSTANCE.system("vi");
}
}
无论如何,类(class)测试都可以在Windows上进行。