在Java中实现“system”命令

2023-11-30

我需要一个“系统”函数调用,与 Python、Perl、PHP、Ruby 等中的函数调用相同。当它在 Rhino JavaScript 引擎上运行时,它将成为名为 Narwhal 的 JavaScript 标准库的一个组件,而 Rhino JavaScript 引擎又在 Java 上运行。

问题在于 Java 的标准库似乎已经抽象化了生成共享父进程 stdio 的子进程的能力。这意味着您不能将交互性推迟到子流程。

我对此的第一个尝试是实现 Python 的 subprocess.popen。这使用三个“泵”线程来独立主动复制父进程的 stdio(以防止死锁)。不幸的是,这给我们带来了两个问题。首先,当子进程自愿退出时,输入不会自动关闭。其次,子进程的流无法正确缓冲和刷新。

我正在寻找能够使我们的 require("os").system() 命令按预期工作的解决方案。

该项目位于独角鲸

相关代码:

  • http://github.com/tlrobinson/narwhal/blob/d147c160f11fdfb7f3c0763acf352b2b0e2713f7/lib/os.js#L10
  • http://github.com/tlrobinson/narwhal/blob/d147c160f11fdfb7f3c0763acf352b2b0e2713f7/engines/rhino/lib/os-engine.js#L37

不确定这是否是您正在寻找的,但您可以调用 Csystem功能通过JNA图书馆:

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");
  }
}

无论如何,粗略测试在 Windows 上是有效的。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在Java中实现“system”命令 的相关文章

随机推荐

  • GDI 渲染到 direct2D ID2D1BitmapRenderTarget 始终是透明的

    我想将我的电影渲染软件从 DirectDraw 移植到 Direct2D 由于兼容性问题 GDI 渲染需要在图像之上完成 为了优化性能我想实现某种后备缓冲机制 但是alpha通道信息似乎有问题 所有 GDI 绘图都显得透明 我创建一个ID2
  • 根据产品类别拒绝在 Woocommerce 中结帐特定购物车商品

    基于仅当购物车中有强制类别的产品时才允许结帐我尝试制作自己的代码示例 如果购物车出现 则呈现通知并阻止结账 仅包含特定类别的产品 它可以预防和错误通知 但在添加其他产品时 它仍然拒绝结帐 Renders a notice and preve
  • 字符编码检测算法

    我正在寻找一种检测文档中字符集的方法 我一直在这里阅读 Mozilla 字符集检测实现 通用字符集检测 我还找到了一个名为 jCharDet 的 Java 实现 JCharDet 这两者都是基于使用一组静态数据进行的研究 我想知道是否有人成
  • 使用 onAuthStateChanged 的​​ Firebase 切换标头选项

    如果我的问题已经提出 我很抱歉 我是 React 的初学者 我真的很想学习如何做到这一点并理解 我在 React JS 项目上使用 Firebase 并且希望在用户连接或未连接时切换标头的一部分 我认为使用条件渲染但在 if 之后的 fir
  • 在 FROM 子句中带有参数的存储过程中使用 LIKE 和 %

    我正在创建一个网页来托管数据库 我希望此网页具有搜索框功能 可以为 SSMS 2014 中的表更新 Visual Studio 2017 中的 GridView 我希望这个 GridView 是动态的 因为最终用户可以选择一个表 一个列 然
  • 如何将 TypeFace 设置为 PagerTabStrip 文本视图

    在我的应用程序中我使用的是浏览器 with a 寻呼机标签条我需要为我的小部件设置自定义字体 设置字体Button or a TextView我只是扩展类并设置字体 public class MyButton extends Button
  • onNewIntent() 在某些设备中没有被调用

    我正在为 Android 应用程序实现 Oauth twitter google 一些用户抱怨因为他们无法登录 分析问题后 我发现在某些设备中有时不调用 onNewIntent 而是调用 onCreate 方法 所以看来活动的任务 实例有问
  • 2011/2012年Java JDBC连接池库选择?

    我应该为新的应用程序项目 而不是 Web 应用程序 使用哪个 JDBC 连接池库 Apache DBCP 有有足够多的未解决问题我认为会被推到2 0 C3P0发展似乎已经停止 而且他们俩看起来相对较慢 Proxool死了 DBPool几乎没
  • jquery/javascript 在设定时间弹出警报

    你知道是否有任何 Jquery 插件可以每隔一段时间或在设定的时间段内显示一条警报弹出消息 例如 您的时间将在 x 分钟后到期 并给出超时时间 谢谢你 既然有原生 为什么还要插件窗口 setIntervalJavaScript 函数 win
  • Mongodb 缓慢更新循环

    我刚刚熟悉 Mongodb 这就是为什么我做了一些愚蠢的事情 我的每个数据集的条目都包含一个时间戳 它们是推文 我没有在插入之前将时间戳从字符串转换为实际的日期格式 而是简单地将其作为字符串插入 现在 我的数据集变得巨大 超过 3 百万条推
  • 如何使用 mocha 使用“done();”进行异步测试?

    我正在努力写一个asynchronous测试用mocha使用done 称呼 这是我到目前为止的代码 it should have data function db put collection key json payload then f
  • NSURLSession 内存泄漏

    即使在使 NSURLSession 无效后 使用 Instruments 运行配置文件 一些名为 TubeManager HTTPConnectionCache 和 HTTPConnectionCacheDictionary 的类 可能是私
  • 无法通过另一个 Android 应用程序使用(公司简介)url 打开 linkedIn 应用程序?

    我想从我的应用程序打开一个网址 即 http www linkedin com company company name 如果安装了 LinkedIn 应用程序 则需要启动应用程序 否则 通过启动浏览器打开网址 我的代码如下 public
  • 阻止脚本编写者攻击您的网站

    我已经接受了答案 但遗憾的是 我相信我们仍停留在最初的最坏情况 验证码大家都在尝试购买垃圾 简短说明 缓存 网络场使得无法跟踪点击量 并且任何解决方法 发送非缓存网络信标 写入统一表等 都会比机器人更慢地减慢网站速度 思科等公司可能有一些昂
  • 从 R 写入 Excel 时处理 java.lang.OutOfMemoryError

    The xlsx包可用于从 R 读取和写入 Excel 电子表格 不幸的是 即使对于中等大小的电子表格 java lang OutOfMemoryError可能会发生 尤其 jcall RJavaTools Ljava lang Objec
  • 选择前一个日期,mysql

    我有一个包含日期列的表 dte 一个 id 列 id和一个值列 val 每个id包含多个日期 每个日期又包含多个id 这是一个面板数据集 我想检索每个 id 的当前日期 当前值以及最后可用日期 当前日期之前 的值 在 mysql 中执行此操
  • 将所有文本集中在 Apple、Banana 和 Carrot div 中的最佳实践是什么?

    我试图保持相同的样式 摘要描述和摘要标题 我希望包含 Apple Banana 和 Carrot 文本的 div 全部居中 我想让西瓜文本保持左对齐 我将如何实现这个目标 看看我的jsfiddle http jsfiddle net p28
  • Firefox 忽略响应标头内容范围并仅播放发送的示例

    我已经建立了一个音频流mp3文件 每次客户端点击音频时 它都会收到如下内容 但它所做的只是播放 1 分钟的样本 而不是 120 分钟 我在这里做错了什么 不能 100 确定 因为您没有提供代码或示例流来测试 但您对 HTTP 范围请求的处理
  • 聚合方法中两列的求和

    我正在使用 mongodb 聚合查询 我的数据库是这样的 id ObjectId 5a81636f017e441d609283cc userid 123 page A newpage A id ObjectId 5a81636f017e44
  • 在Java中实现“system”命令

    我需要一个 系统 函数调用 与 Python Perl PHP Ruby 等中的函数调用相同 当它在 Rhino JavaScript 引擎上运行时 它将成为名为 Narwhal 的 JavaScript 标准库的一个组件 而 Rhino