标签: interactive

如何用Python包装CLI程序(保持交互性)?

我想为交互式CLI程序(Asterisk CLI)编写一个包装器.

基本上,我需要保持与CLI的交互(包括tab-completion),但我想过滤Asterisk的输出,以便只显示与给定模式匹配的行.

我尝试了一种基于select()的方法,使用popen.popen4并在read_fs中放入asterisk stdout_and_stderr和sys.stdin,但它有点不起作用.

谁能给我一些好的指示?

非常感谢,安德里亚

python select interactive command-line-interface wrapper

3
推荐指数
1
解决办法
1035
查看次数

防止交互式ssh提示

我有一个ssh脚本,它使用本地密钥登录远程主机 - 没有什么太令人兴奋的了.密钥是passworded,我通常会将其添加到代理以避免提示.

有时我会在代理运行之前运行程序,它会等待解锁短语.在这种情况下,我希望命令完全失败,而不是以交互方式提示.

有人知道是否有这个选项?

authentication ssh interactive prompt

3
推荐指数
1
解决办法
903
查看次数

交互式会话中的Python登录

我正在尝试在Python 2.7应用程序中实现日志记录,并且发现它非常有用。但是,我已经注意到,以交互方式运行Python时,每个日志记录消息都会打印多次。消息被打印的次数与我之前运行脚本的次数相同,因此似乎在脚本结束时未正确清理记录器(我想)。考虑以下示例:

import sys
import logging

def main(argv=None):

    log = logging.getLogger('test')
    log.setLevel(logging.DEBUG)

    console_handler = logging.StreamHandler()
    console_handler.setFormatter(logging.Formatter("%(message)s"))
    log.addHandler(console_handler)

    log.info('Starting something...')
    log.info('Doing something...')
    log.info('Finished something.')

    logging.shutdown()

if __name__=='__main__':
    sys.exit(main(sys.argv[1:]))
Run Code Online (Sandbox Code Playgroud)

打字

>>> import file.py
>>> file.main()
Run Code Online (Sandbox Code Playgroud)

产生以下内容:

Starting something...
Doing something...
Finished something.
Run Code Online (Sandbox Code Playgroud)

然后file.main()再次输入将产生:

Starting something...
Starting something...
Doing something...
Doing something...
Finished something.
Finished something.
Run Code Online (Sandbox Code Playgroud)

重复第三次将给出三个或每个消息,依此类推。有谁知道为什么会这样-这是日志记录模块的预期行为吗?如果是这样,我该如何更改?如果python file.py按预期方式运行,上述脚本仅显示每个消息之一。

python logging interactive

3
推荐指数
1
解决办法
3964
查看次数

交互式"r"elisp与另外的args一起定义?

是否有可能使用代码"r"编写一个具有附加可选参数的交互式defun(以便它在所选区域内执行某些操作,但使用另一个参数)?我想要以下内容:

(defun my-function (start end &optional arg)
  "Do something with selected region"
  (interactive "r")
  (if arg
      (setq val arg)
    (setq val 2))
  (do things...))
Run Code Online (Sandbox Code Playgroud)

看一下它说的文档

'r':点和标记,作为两个数字参数,最小的第一个.这是唯一一个指定两个连续参数而不是一个参数的代码字母.没有I/O.

我不确定'No I/O'和'两个连续的参数'是否意味着它需要2个且只有2个参数(即,仅限于区域的起点和终点作为args).虽然它允许我用额外的参数来评估和运行defun,但Emacs似乎忽略了它.

谢谢.

emacs elisp interactive function

3
推荐指数
1
解决办法
962
查看次数

为什么我不能通过 fabric 与 redis-cli 交互?

我有一个像这样设置的结构任务:

@task
def cli():
    command = [
        os.path.join(env.servers_path, "bin", "redis-cli"),
    ]

    run(" ".join(command))
Run Code Online (Sandbox Code Playgroud)

运行它会给我一个提示,但没有交互性:

$ fab cli                                            
[server] Executing task 'cli'

[server] Executing task 'redis.cli'
[server] run: /path/to/bin/redis-cli
[server] out: redis 127.0.0.1:6379> help
<no output produced>
Run Code Online (Sandbox Code Playgroud)

键入进一步会产生一个“out:”提示,我在上面键入,但我从来没有从 redis 得到任何东西。

但是,如果我更改为其他一些交互式提示,我确实会获得交互性:

@task
def cli():
    command = [
        "python"
    ]

    run(" ".join(command))
Run Code Online (Sandbox Code Playgroud)

产生:

$ fab cli                                            
[server] Executing task 'cli'
[server] run: python
[server] out: Python 2.4.3 (#1, Sep  3 2009, 15:37:37) 
[server] out: [GCC 4.1.2 20080704 (Red Hat 4.1.2-46)] on linux2 …
Run Code Online (Sandbox Code Playgroud)

python shell interactive fabric redis

3
推荐指数
1
解决办法
971
查看次数

如何使用菜单中的键盘箭头导航制作交互式Python脚本

我想用菜单创建交互式Python脚本(可能使用curses?),用户可以使用键盘箭头在菜单上导航.实现此类功能的最简单方法是什么?任何简单的用法/教程?谢谢!

python curses interactive

3
推荐指数
1
解决办法
7246
查看次数

Qt 中的交互式图形

我想使用 Qt 和 C++ 制作这样的交互式图形:http : //jsxgraph.uni-bayreuth.de/wiki/index.php/Cubic_spline_interpolation

关于如何做到这一点的任何线索?

编辑:好的,我已经尝试过 QGraphicsView 类和 qwt 库。然而,我发现没有简单的方法来引入交互性。有没有一种简单的方法可以做到这一点?

qt interactive graph

3
推荐指数
1
解决办法
6451
查看次数

在 PowerShell 中使用 Plink 创建进程并向其发送命令

我需要能够在远程设备上创建一个进程并使用 PowerShell 脚本向它发送命令。我需要这样做,因为我在使用命令时会收到提示。我一直试图通过使用 Google 搜索和以下链接来弄清楚如何做到这一点:http : //tartarus.org/~simon/putty-snapshots/htmldoc/Chapter7.html#plink。通过该链接,我意识到在 Plink 中使用带有命令列表的文件将不起作用,原因如下(从该链接复制并粘贴):

您可以在服务器命令行上有效运行的任何非交互式命令,您都可以通过这种方式使用 Plink 在批处理文件中运行。

它说“非交互式命令”,这就是我正在使用的。无论如何,我也尝试使用带有命令列表的文件,但它并没有解决我的问题,因为我基本上需要发出一个命令,等待,然后在提示我时再给出一个。这是我在PuTTY 常见问题解答中找到的内容,基本上是我想尝试的内容:

可能你最好的选择是使用命令行连接工具 Plink。如果您可以将 Plink 作为第二个 Windows 进程启动,并安排您的主进程能够通过管道向 Plink 进程发送数据并从中接收数据,那么您应该能够从您的程序建立 SSH 连接。例如,这就是 CVS for Windows 所做的。

编辑:根据 user2460798 的回答,我尝试了下面的解决方案。我希望使用 PuTTY 并能够以这种方式向它发送命令。我现在的问题是我不知道如何向打开的 PuTTY 会话发送命令。所以基本上这段代码打开了一个 PuTTY 会话并尝试向它写入“ls”命令,但没有任何反应。我不知道“ls”文本的去向。

$procInfo = New-Object Diagnostics.ProcessStartInfo
$procInfo.RedirectStandardOutput=$true
$procInfo.RedirectStandardInput=$true
$procInfo.RedirectStandardError=$true
$procInfo.FileName="putty.exe"
$procInfo.Arguments="-ssh -pw <password> <username>@<device>"
$procInfo.UseShellExecute=$false
$p=[diagnostics.process]::start($procInfo)
sleep -Milliseconds 3000
$p.StandardInput.WriteLine("ls")
Run Code Online (Sandbox Code Playgroud)

powershell putty plink interactive process

3
推荐指数
1
解决办法
2万
查看次数

如何将字符串推送到标准输入?在启动时通过stdin提供输入,然后以交互方式读取stdin输入

有没有办法在调用时将字符串"推"到程序的stdin流?

这样我们才能有效果

echo "something" | ./my_program
Run Code Online (Sandbox Code Playgroud)

但是,不是在读取EOF之后"something",my_program将从原始标准输入(例如,键盘)读取其进一步输入.

示例:假设我们要启动一个bash shell,但我们要在其中做的第一件事就是调用date.echo date | bash不会做这个工作,因为shell会在运行后终止date.

linux bash stdin interactive

3
推荐指数
1
解决办法
776
查看次数

两个交互式散景图:在一个图形中选择一个值,然后更改另一个图形

我想创建一个交互式python散景图。我有两个通过列名称链接的数据框。当我在plot1中选择一个条形时,我想在plot 2中显示属于该列的数据框2(df2)的数据。例如,df1可以包含df2所有列的平均值。如果单击显示的均值,则可以在第二张图中查找构成均值基础的原始数据。不幸的是,我无法使其正常运行,也找不到可比较的示例。以下是到目前为止的内容。我认为错误在其中mycolumn="@colnames",而taptool没有返回我期望的结果。 下面的源代码根据@bigreddot的评论进行了更新

import pandas as pd
import numpy as np
from bokeh.models import ColumnDataSource, TapTool
from bokeh.plotting import figure
from bokeh.layouts import row
#from bokeh.plotting import show
from bokeh.io import curdoc

# data for plot 2
df2 = pd.DataFrame({"A" : np.linspace(10, 20, 10),
                    "B" : np.linspace(20, 30, 10),
                    "C" : np.linspace(30, 40, 10),
                    "D" : np.linspace(40, 50, 10),
                    "E" : np.linspace(50, 60, 10),})
source2 = ColumnDataSource(
        data=dict(
            x=list(df2.index.values),
            y=list(df2.iloc[:,0].values)
        )
    )

# data for plot 1
df1 …
Run Code Online (Sandbox Code Playgroud)

python interactive bokeh

3
推荐指数
3
解决办法
3625
查看次数