问题标签 [interactive-shell]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3553 浏览

python - 通过交互式外壳控制 Raspberry Pi 的 Telegram 机器人

我正在尝试为 Telegram 机器人编写程序来控制我的 Raspberry Pi,以便我发送给机器人的每条消息都将被解释为 shell 命令 [1][2]。

Raspberry Pi 是版本 2 模型 B,运行 Arch Linux ARM。该程序是用 Python 3.6.0 编写的,带有Telepot模块,并从 Pi 执行。

到目前为止,我一直在使用模块子进程来执行命令,如下所示:

该机器人工作得很好,但问题是我无法像在真实 shell 中那样执行每个命令。我特别在谈论那些绕过 STDOUT 并将其输出直接发送到 tty 的交互式命令(ssh通常ftp会提示输入密码并等到用户键入密码)。subprocess不允许读取或写入 tty。事实上,如果我向我的机器人发送命令tty,它会回复:not a tty
此外,一些 shell 命令动态更新它们的输出或继续运行直到某些事件发生(例如ping 8.8.8.8,或grep pattern),我也没有成功地重现它们,因为我无法发送Ctrl+CCtrl+D. 请注意,第二个问题是一个不同的问题,因为可以将 ping 的输出重定向到文件(而不能重定向[sudo] Password for user:);但在这种情况下,我无法将输入发送到 shell。
此外,作为可选的,如果机器人能够理解管道、重定向和通配符,那将很有趣。
在我看来,造成这些问题的原因是我无法与 shell交互。我相信所有这些的解决方案只是一个。

所以问题是,从广义上讲,我怎样才能实现这样一个允许我通过它运行交互式 shell 命令的机器人程序 [3]?

我想达到的最终结果的一个例子是(以我和机器人之间对话的形式):

我:密码

机器人:/home/user/some/directory

我:sudo chmod 777 file.txt

机器人:[sudo] 用户密码:

我:qwerty

我:ssh 用户@主机

机器人:用户@主机的密码:

我:qwerty2

Bot:欢迎主持...

或者

我:猫

我:你好

机器人:你好

我:测试

机器人:测试

我:Ctrl+D

PS
我已经尝试过 Python 的pexpect模块,但我认为它对我来说不太好,因为我不期望任何特定的输出;我只想得到贝壳给我的任何东西。(也许有一种方法可以做我不知道的事情?)
我也尝试过使用 fifo 文件,但它们不起作用,因为它们连接到 STDIN 和 STDOUT,而不是连接到 tty。

[1] 示例:我发送消息pwd,机器人回复/working/directory
[2] 没错,我可以使用 ssh 或类似的;但是,让我感兴趣的是,机器人将独立于执行请求的机器的操作系统(无论是 Linux、Windows、Android 还是其他任何操作系统)工作,而无需安装其他软件(甚至无需安装 Telegram,因为存在 Telegram 网络) .
[3] 问题也可能是:如何通过脚本直接连接到 tty?如果更容易,该脚本也可以用 bash 或其他语言编写。但我不想偏袒你,我对每一种解决方案都持开放态度。一旦我在变量中输入/输出,发送消息就不是问题了。

0 投票
2 回答
86 浏览

windows - 在 Emacs eshell-command 中调用复杂的管道查找

我正在尝试做一些看似简单的事情:创建一个 Emacs 函数来为我创建一个 TAGS 文件。这里有执行此操作的简单说明

问题是我需要“cpp”文件而不是“c”。这意味着我的 find 命令必须更改为:

这在命令行上效果很好。我遇到的问题是 eshell 似乎根本不喜欢那样。当我执行此功能时,我不断收到: File not found - "*.h": Invalid argument.

这个问题的答案表明,正确使用shell-quote-argument可能会解决这类问题,但我无法破解出有效的解决方案。例如,这会产生相同的错误:

0 投票
0 回答
59 浏览

python-3.x - Sublime Text,Python:交互式外壳(运行构建时)不起作用

我刚刚安装了 sublime text 并开始使用它,使用 python 代码。我涉足了Python.sublime.build包含运行代码命令的文件。

我想使用"shell_cmd": "python -i \"$file\""这样,一旦脚本运行,shell 就会进入一个允许我检查变量的交互式会话。

但是,如果我这样做,我可以看到>>>典型的交互式会话并在其后键入,但该enter命令不起作用。我试过了shift enter,或者ctrl enter类似地,它只是添加一个换行符,而不是处理我在行上键入的内容。

任何人都知道如何使交互式 python shell 与 sublime3 一起工作?

0 投票
0 回答
405 浏览

java - 使用 Java 执行 metasploit 命令

我正在尝试用 Java 开发一个基于 UI 的应用程序来使用 Metasploit(操作系统:Kali Linux)。基本上我想启动一个终端并运行命令“msfconsole”,然后一旦 Metasploit 框架控制台启动,我想在其中执行命令。

使用 Java 的 ProcessBuilder 类,我可以打开终端并启动 Metasploit 框架控制台,但我无法在框架下执行任何命令。我是 Java 的 Runtime 和 ProcessBuilder 类的新手。启动框架控制台后,我确实尝试执行 Metasploit 框架的“帮助”命令,但该命令是直接在终端下执行的,因此会显示终端帮助。那么有人可以帮我解决这个问题吗?代码片段如下所示。我还在这篇文章的末尾附上了一张支持图片。

我已经圈出了我想输入命令的部分。该图显示了在终端窗口内运行的 Metasploit 控制台:

我已经圈出了我想输入命令的部分。 该图显示了在终端窗口内运行的 Metasploit 控制台。

0 投票
1 回答
33 浏览

python - 是否有编写像 shell 程序一样响应的 python 程序的模式

我想修改我编写的 python 程序以接受来自命令行的命令,然后像 shell 一样响应这些命令。

是否有这样做的标准模式或库,或者我只是使用类似 awhile True:和的东西stdin.readline()

0 投票
1 回答
472 浏览

python - 打印pyObjC版本安装?

我最近开始使用优秀的 pyObjC 扩展在 python 中编写“Objective C”。我正在使用 macOS High Sierra (10.13.4) 和苹果的股票 python 2.7.10 安装。使用交互式 python shell 很容易找到该部分:

如何对已安装的 pyObjC 扩展执行相同操作?

0 投票
1 回答
73 浏览

bash - 如何编写与程序交互并传递参数的 shell 脚本(任何 shell 语言)?

这是我的程序,它接受一个参数并将其打印出来。

这是我的 bash 脚本,它试图将参数传递给程序。

这是结果.txt。我希望它更像这样:

我应该如何修复它,以便脚本更像人类一样传递参数。

并且 bash 是一种非常好的脚本语言来完成这种工作还是有其他更好的脚本语言。(谷歌说 tcl 对于这种交互式程序来说比 bash 更好?)

0 投票
1 回答
451 浏览

python - tf.InteractiveSession() 或 tf.enable_eager_execution()

这是一个关于学习 TensorFlow 的初学者问题。我习惯于在 Jupyter notebook 这样的交互式 shell 中玩机器学习模型。我理解tensorflow采用惰性执行风格,所以我不能轻易打印张量来检查。

经过一番研究,我发现了两种解决方法:tf.InteractiveSession()tf.enable_eager_execution(). 据我了解,两者都允许我在编写变量时打印它们。这个对吗?有偏好吗?

0 投票
1 回答
1505 浏览

go - 如何在交互式 shell 中执行多个命令

curl我的应用程序适用于从控制台( 、、、date等等ping)提供的所有类型的 shell 命令。现在我想用交互式 shell 命令(如 mongo shell)来覆盖这个案例,使用os/exec.

  • 例如,作为第一步,连接到 mongodb: mongo --quiet --host=localhost blog

  • 然后执行任意数量的命令,每一步都得到结果 db.getCollection('posts').find({status:'INACTIVE'})

  • 进而 exit

我尝试了以下方法,但它允许我每个 mongo 连接只执行一个命令:

有没有办法运行多个命令,获得每个执行命令的标准输出结果?

0 投票
1 回答
388 浏览

go - go exec 对不同 shell 命令的不同行为

我正在尝试对控制台 go 应用程序使用不同的 shell 命令,并且由于某种原因,以下交互式 shell 的行为不同。

此代码打印 mongoDB 查询的结果:

但是 Neo4J shell 的相同代码不会打印任何内容:

有什么不同?我怎样才能使第二个工作?(不关闭命令)

当我直接打印到以下位置时,PS Neo4J 工作正常os.Stdout