有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java如何从Jython执行交互式shell?

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

我已经看过Jython子流程模块。然而,我所看到的大部分内容只会运行并等待子进程终止(即非交互式)。没有一个示例显示如何以交互方式调用shell。大多数Java也是如此。lang.Runtime。我见过的exec()示例


共 (1) 个答案

  1. # 1 楼答案

    这个简单的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,该子shell用活动tty替换受损的stdin、stdout流