如何从Jython执行交互式shell?

时间:2011-10-29 19:26:17

标签: java python exec jython sh

我需要一些示例Jython或Java代码来执行交互式OS shell(/ bin / sh)。我们的开发环境是Linux上的Java。我想要做的是为开发人员提供一种编写Jython脚本的方法,然后放入一个shell,它允许他们检查系统。我需要从Jython或Java执行此操作的原因 - 而不是将所有这些包装在shell脚本中 - 是我们使用Java加载一些库,我需要在交互式shell运行时保持加载。如果JVM在交互式shell运行之前终止,我们的一些自定义硬件将被重置。

我查看了Jython子进程模块。但是,我所看到的大部分内容只会在子进程上运行并等待终止(即非交互式)。这些示例都没有显示如何以交互方式调用shell。我见过的大多数Java java.lang.Runtime.exec()示例也是如此。

1 个答案:

答案 0 :(得分:2)

这个简单的jython代码有什么问题,stdin,stdout不能像我们期望的那样工作

import subprocess
import os          
subprocess.call([os.environ.get('SHELL', '/bin/sh'), '-i'])

假设我们想在tty上生成shell,以下似乎是 给出更好的结果:

import os
import subprocess

subprocess.call([os.environ.get('SHELL', '/bin/sh') +
    ' -i < /dev/tty > /dev/tty 2>&1'], shell=True)

这将在另一个子shell中运行shell,用活动的tty替换残缺的stdin,stdout流。