java shell 交互_如何管理交互式shell的输入和输出?

我正在尝试构建一个应用程序,使用户能够与命令行交互式shell进行交互,如IRB或Python . 这意味着我需要将用户输入传递到shell中,并将shell的输出传递回用户 .

我希望这将像管道STDIN,STDOUT和STDERR一样简单,但是大多数shell似乎对STDIN输入的响应不同,而不是直接键盘输入 .

例如,以下是将STDIN传递给 python 时发生的情况:

$ python 1> py.out 2> py.err <

> print 'hello'

> hello

> print 'goodbye'

> EOI

$ cat py.out

hello

$ cat py.err

Traceback (most recent call last):

File "", line 2, in

NameError: name 'hello' is not defined

似乎Python将STDIN解释为脚本文件,并且它不管道任何交互式接口,例如行的开头的“>>>” . 它也在第一行失败并出错,因为我们在outfile中看不到“再见” .

以下是 irb (Interactive Ruby)的情况:

$ irb 1> irb.out 2> irb.err <

> puts 'hello'

> hello

> puts 'goodbye'

> EOI

$ cat irb.out

Switch to inspect mode.

puts 'hello'

hello

nil

hello

NameError: undefined local variable or method `hello' for main:Object

from (irb):2

from /path/to/irb:16:in `'

puts 'goodbye'

goodbye

nil

$ cat irb.err

IRB的响应与Python不同:即,即使出现错误,它也会继续执行命令 . 但是,它仍然缺少shell接口 .

应用程序如何与交互式shell环境交互?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值