如何从Jython执行交互式shell?

1 投票
1 回答
1331 浏览
提问于 2025-04-17 05:15

我需要一些示例代码,使用Jython或者Java来执行一个交互式的操作系统命令行(/bin/sh)。我们的开发环境是Linux上的Java。我想要做的是给开发者提供一个写Jython脚本的方式,然后可以进入一个命令行,这样他们就可以检查系统的状态。之所以需要通过Jython或Java来执行这个,而不是简单地把所有内容放在一个脚本里,是因为我们需要用Java加载一些库,而这些库在交互式命令行运行时必须保持加载状态。如果Java虚拟机在交互式命令行运行之前就结束了,我们的一些定制硬件会被重置。

我查看过Jython的子进程模块。但是,我看到的大部分内容只能运行一个子进程并等待它结束(也就是非交互式的)。没有任何示例展示如何以交互方式调用命令行。大多数我看到的Java的java.lang.Runtime.exec()示例也是如此。

1 个回答

2

这个简单的jython代码有什么问题呢?主要是它的输入和输出(stdin和stdout)没有按我们预期的那样工作。

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

假设我们想在终端上启动一个shell,下面的代码似乎能得到更好的效果:

import os
import subprocess

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

这段代码会在另一个子shell中运行,这样就能用活跃的终端替换掉那些有问题的输入和输出流。

撰写回答