首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

为什么在clojure中使用(sh "top")时没有输出?

在Clojure中使用(sh "top")时没有输出的原因可能是由于sh函数是Clojure的一个shell命令执行函数,它会启动一个子进程来执行指定的shell命令,并返回该子进程的输出结果。然而,当执行top命令时,它通常会以交互式的方式显示系统的进程信息,而不是将结果直接输出到标准输出流。

在Clojure中,当使用(sh "top")执行top命令时,由于没有提供一个有效的交互式终端,top命令无法正常工作并输出结果。这是因为top命令需要一个终端来显示结果,并且与用户进行交互。

要解决这个问题,可以尝试使用其他方法来执行top命令并获取输出结果。一种常见的方法是使用Java的ProcessBuilder类来创建一个子进程,并通过重定向输入输出流来执行命令并获取输出结果。以下是一个示例代码:

代码语言:clojure
复制
(require '[clojure.java.shell :as shell])

(defn execute-command [command]
  (let [process (.start (ProcessBuilder. (into-array String command)))]
    (-> process
        .getInputStream
        java.io.InputStreamReader.
        java.io.BufferedReader.
        .lines
        (reduce str))))

(println (execute-command ["top"]))

上述代码中,execute-command函数使用ProcessBuilder创建一个子进程,并通过重定向输入输出流来执行指定的命令。然后,通过逐行读取子进程的输出流,并将其连接成一个字符串,最后将结果打印出来。

需要注意的是,上述代码只是一个示例,实际使用时可能需要根据具体情况进行适当的修改和调整。

关于Clojure中执行shell命令的更多信息,可以参考Clojure官方文档中的相关内容:clojure.java.shell

请注意,以上答案仅供参考,具体解决方法可能因环境和需求而异。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【DB笔试面试565】Oracle为什么索引没有使用?

♣ 题目部分 Oracle为什么索引没有使用? ♣ 答案部分 “为什么索引没有使用”是一个涉及面较广的问题。有多种原因会导致索引不能被使用。...还有很多其它原因会导致不能使用索引,这个问题在MOS(MOS即My Oracle Support)“文档1549181.1为何在查询索引未被使用”中有非常详细的解释,作者已经将相关内容发布到BLOG(...n 索引是否应该被使用? 二、索引本身的问题 n 索引的索引列是否WHERE条件(Predicate List)? n 索引列是否用在连接谓词(Join Predicates)?...n 总体成本,表扫描的成本是否占大部分? n 访问空索引并不意味着比访问有值的索引高效? n 参数设置是否正确? 四、其它问题 n 是否存在远程表(Remote Table)?...n 索引列是否使用了前置通配符(%)? n 索引列是否使用了非等值连接符? n 是否WHERE子句中对索引列进行了IS NULL值判断? n 是否查询转换失败导致不能选择索引?

1.1K20

既生 HTTP 何生 WebSocket ?

最近一两年一直使用 Python,使用体验从最开始的惊喜有趣,到后面的简简单单,一路走来收获颇多。...如果要服务器源源不断的向客户端返回数据,使用 HTTP 实现的话,除了处理不停的刷新请求,应该没有别的好办法。...WebSocket Vs HTTP 我查了下资料,答案很简单,因为 HTTP 协议有一个缺陷:通信只能由客户端发起,当客户端与服务器需要频繁通信,HTTP 协议非常低效,为什么低效?... WebSocket API ,浏览器和服务器只需要完成一次握手,两者之间就可以直接创建持久性的连接,并进行双向数据传输。...,并写入标准输出,你就将你的程序作为 WebSocket 服务器,因此,你可以使用任何编程语言,Python, Ruby, Perl, Bash, .NET, C, Go, PHP, Java, Clojure

61620

125. 精读《深度学习 - 函数式之美》

然而在生产环境,基于 性能和安全性 的考虑,一般会使用函数式语言 Clojure 或 Haskell。 在生产环境,可能要并发出里几百万个参数,因此面临的挑战是:如何高效、安全的执行这些运算。...实际上当两个线程出现竞争而失败Clojure 会自动重试其中之一。...但 Haskell 却不会陷入死循环,而是直接输出第一位数字 1。...3 总结 本文介绍了为什么深度学习更适合使用函数式语言,以及介绍了 Clojure 与 Haskell 语言的共性:安全性、高性能,以及各自独有的特性,证明了为何这两种语言更适合用在深度学习。...函数式应该只有表达式,没有语句,这是因为函数式是为了处理运算而诞生的,因此很适合用在深度学习领域。

40010

linux 后台运行进程:& , nohup

后台执行 比较下 & 与 nohup: & :后台运行,但用户终端退出(断连),命令结束 nohup test.sh & : 后台运行,用户终端退出(断连)依然保持运行,可使用标准输入输出 & 当在前台运行某个作业...如果放在后台运行的作业会产生大量的输出,最好使用下面的方法把它的输出重定向到某个文件: command > out.file 2>&1 & 这样,所有的标准输出和错误输出都将被重定向到一个叫做out.file...(ps -ef | grep 进程号 或者 kill -9 进程号) nohup 使用&命令后,作业被提交到后台运行,当前控制台没有被占用,但是一但把当前控制台关掉(退出帐户),作业就会停止运行。...如果当前目录的nohup.out文件不可写,输出重定向到$HOME/nohup.out文件。如果没有文件能创建或打开以用于追加,那么 Command 参数指定的命令不可调用。...只有在当前命令行中使用 nohup和& ,jobs命令才能将它显示出来。如果将他们写到 .sh 脚本,然后执行脚本,是显示不出来的 比如执行下面这个脚本后,jobs 显示不出来: #!

4.3K40

Clojure 开发那些事

作为万里长城的第一步,这篇文章首先如何入门 Clojure 语法,紧接着介绍 Clojure 开发环境搭建,然后介绍使用第三方库的一些注意点,最后介绍一下常见的测试方法。...《The Joy of Clojure》一书中有简单介绍,不过我觉得初学者可以完全不用去关心实现的细节,遇到性能问题考虑去优化。...这一点非常重要,估计也是为什么 Clojure 较其他 Lisp 方言更流行的原因。...使用比较简单,通过 Intellj 插件管理器安装后即可使用,第一次使用时需要设置下快捷键类型 Emacs + Cider 作为一门 Lisp 方言,怎么能没有一个好的 Emacs mode 呢?...答案是肯定的,clojure.tools.trace,Github 上的 README 比较详细,大家可以可以去了解,我目前自己的项目里面还没有采用过这个方法。

1.5K20

Clojure 运行原理之字节码生成篇

上一篇文章讲述了 Clojure 编译器工作的整体流程,主要涉及 LispReader 与 Compiler 这两个类,而且指出编译器并没有Clojure 转为相应的 Java 代码,而是直接使用...交互 defrecord、deftype生成同名的类,proxy、reify生成匿名的类 需要明确一点,只有 AOT 编译Clojure 才会在本地生成 .class 文件,其他情况下生成的类均在内存...这种重定向开发非常方便,可以用 nrepl 连接到正在运行的 Clojure 程序,动态修改程序的行为,无需重启。...但是正式的生产环境,这种重定向对性能有影响,而且也没有重复定义函数的必要,所以可以服务启动指定-Dclojure.compiler.direct-linking=true来避免这类重定向,官方称为...把生成的 uberjar 解压打开,可以发现 clojure.core 里面的函数都在,这些函数程序启动都会被加载。 这就是 Clojure 启动慢的原因:加载大量用不到的类。

70020

Clojure 运行原理之编译器剖析

Rich Hickey 一 Google Group里面有阐述不开放 read table 的理由,这里摘抄如下: I am unconvinced that reader macros are needed...Compiler.java Compiler 类主要有三个入口函数: compile,当调用clojure.core/compile使用 load,当调用clojure.core/require、clojure.core.../use使用 eval,当调用clojure.core/eval使用 这三个入口函数都会依次调用 macroexpand、analyze 方法,生成Expr对象,compile 函数还会额外调用...macroexpand Macro 毫无疑问是 Lisp 的屠龙刀,可以在编译自动生成代码: static Object macroexpand(Object form) { Object...emit 这里需要明确一点的是,Clojure 编译器并没有Clojure 代码转为相应的 Java 代码,而是借助 bytecode 操作库 ASM 直接生成可运行在 JVM 上的 bytecode

96430

改善单元测试的新方法|洞见

这种基于用例的测试方式开发(包括TDD)过程十分好用。因为它清晰地定义了输入输出,而且大部分情况下体量都很小、容易理解。 但这样的测试方式也有坏处。 第一点在于测试的意图。...整个分析和构造的过程,都没有涉及具体的数据,这样会强制我们揣摩输入数据可能的模样,而且也能避免测试意图被掩盖掉——正如前面所说,return 3 when add 1 and 2并不代表什么,return...我们信任测试能在代码变动给予警告,但此处它失信了,这就尴尬了。 如果使用生成式测试,我们规定: 任取一个自然数a,在其上调用identity-nat的结果总是返回a。...当然也存在这样的可能:一次运行,我们的测试无法发现失败的用例。...Clojure.spec提供方法很有前景,它可以让开发者需要的时候,就能从类型和取值范围获益。 另外,除了Clojure,其它语言也有相应的生成式测试的框架,你不妨自己的项目中试一试。

89350

实用的函数式编程

女主角正在使用一个笔记本, 使用 Google 一个时髦的浏览器里面浏览网页, 使用翻盖手机接收信息. 一切是那么熟悉....然而 -- 这种变化并没有从 2000 到 2011 年的那般戏剧化, 也没有从 1990 到 2000 年的翻天覆地. 我们又到了计算机和软件技术上的一个瓶颈期了吗?...为什么呢? 从一开始让我们感兴趣的地方开始 -- 函数式编程使得并发变得十分容易. 如果你要搭建一个有很多线程或是进程的系统, 使用函数式编程将会大大减少你可能由于竞争条件和并发更新遇到的问题....使用这些只是一个熟悉程度的问题. 一旦你熟悉这些概念以后 -- 并不会花费太长时间, 编程会变得容易的多. 为什么变得容易了呢? 因为你不再需要跟踪系统的状态....函数式编程, 你的确无法改变一个对象的状态. 但是那又怎么样呢? 当你想要对一个对象进行改变, 得到一个新的对象就好了, 之前的对象无须改变. 一旦你习惯于此, 这是十分容易处理的.

1K20

JVM并不是那么重量级

假期的时候观看了一些关于Clojure的讨论后发现演讲者们又一次又一次地提到了这个反对意见。 关于这一点,我Slack做过一段说明。现在,我为了更广泛的讨论而把它记录下来。...我很好奇,因此研究了一下我的~/.m2文件夹,Clojure开发的9个月里,我只积累了1010MB的依赖关系。甚至还没有十亿字节。...与JVM的日常工作 我我的的2012 MacBook Pro上运行了至少5个JVM进程,内存为8GB。我从来没有尝试过同时启动5个Rails应用程序。 为什么同时开启5个?...正确的思路下谁会运行5个或更多的JVM进程呢?我可以很自信地说我肯定不是唯一的一个。 哦,但是class paths和其他疯狂的东西呢?由于Clojure提供了伟大工具,没有必要去管这些。...这也是你使用npm或bundler的原因,所以你不必去关注这些信息。你可以不关注,但是你可能会有一个不同的问题你没有看到。

1.6K50

来来来,咱们元编程入个门

正好之前有个读者留言中诉苦,说看了之前的文章 谈谈抽象 不解馋,虽然学了 clojure 却总也厘不清 macro 的使用,跟着书上的例子可以写下去,脱离了例子却步履维艰,总觉得自己对于 metapgrogramming...不少谈到 macro 的书籍,对其都语焉不详,就连 wikipedia,啰啰嗦嗦写了一大段,都没有讲清 macro 的内涵: A macro in Lisp superficially resembles...注意这里当我们要获取原始表达式的值,我们需要使用 unquote 来获取表达式的值,而非表达式的 AST。合适的地方 unquote 是写 macro 的基本能力。...使用 macro 进行 metaprogramming ,最常见的一个坑是表达式的反复求值。我们看一个函数: ?...在这个函数里,我们可以任意使用和操作变量 b,因为 b 的值传入函数,已经得到计算。

929100

Python天下第一!综合热度、增长速度、工作需求都是榜首|IEEE Spectrum年度排行

Stack Overflow排名:JavaScript语言最流行,除此之外Rust最受喜爱,Clojure最赚钱等等,Python各个指标里都不能拔得头筹。...另外每个都有简介,这样大家刷到一些陌生的语言也不至于一头雾水。 看了一下Stack Overflow排行中最赚钱的Clojure,39。...快速增长榜: 其中,Dart和Rust是新出现的两位(没上榜综合排行前10),其中RustStack Overflow排行也斩获了最受喜爱语言第一名,也许以后有希望冲进综合排名前10。...注意:可双选,比如查看Web开发中上升趋势最快的语言: 嵌入式开发市场需求最高的语言: 这个功能是不是非常有用~ 最后,别的不说,不知道你有没有发现,各指标都在霸榜的Python似乎疯狂暗示,学我...查看完整排名: https://spectrum.ieee.org/top-programming-languages/ 参考链接: https://spectrum.ieee.org/ieee-top-programming-languages-design-methods-and-data-sources

36330

clojure基础入门(一)

欢迎进入clojure的世界。  ? 变量 Clojure的变量可以def关键字来声明:  ? clojure数据类型是弱类型,对应java的object,然后通过变量名直接调用。...函数式编程以函数为第一类对象,其小括号后面第一个元素被Clojure解释器当成一个函数或宏,其后面的都会被当成参数,如上"hello world"是被当成参数传入str函数进行输出。...定义函数用defn,跟定义变量的def类似: (defn Get [] "Hello World") ;=>"Hello World" 下面定义了get函数,括号为函数的参数,输出Hello World...下面函数内部使用a函数参数,如果想要拼接的话,可以在内部使用str函数,用它返回的值当成Get函数的参数:  ? 多个参数表示形式:[arg1,arg2] 流程控制 判断if ?...注意if是不是函数或宏,而是叫做special form(特殊形式),而且没有else,用空白或换行即表示else,不用显式return,clojure会将最后一个表示的值作为函数的返回值。

1.5K30
领券