问题标签 [pexpect]

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 回答
22133 浏览

python - python pexpect sendcontrol 关键字符

我正在使用 pythons pexpect 模块来自动执行任务,我需要帮助来确定要与 sendcontrol 一起使用的关键字符。怎么能发送控制键 ENTER ?以及如何找到关键字符以供将来参考?

这是我正在处理的代码。

0 投票
1 回答
1841 浏览

python - 在预期交互方面几乎不需要帮助

使此代码与 pexpect 模块一起工作几乎不需要帮助。

此代码通过登录服务器执行 git pull,然后下载最新代码(如果升级可用),或者只是发送一条消息说“已经是最新的”。

该代码实际上识别了密码屏幕,但没有识别文本“已经是最新的”

不知道我是否在这里遗漏了什么。

代码片段是:

任何帮助是极大的赞赏。

谢谢,-维杰

0 投票
1 回答
1393 浏览

java - Java的Pexpect等价物?

java有没有pexpect等价物?我知道我可以通过使用 commons exec 或 processbuilder 并重定向 stdin/stdout 然后解析流等来复制功能但是,我的问题是,是否有一个即插即用的等价物?

我想要像在 python 中那样运行交互式命令行程序。一个小例子是:

然后我以交互方式使用 myProg(发送命令、获取/解析结果等)。我可以通过 myProg.before 等获得两次调用之间的结果。

是否有一个包可以在 java 中以相同的简单方式提供相同的功能?

0 投票
1 回答
144 浏览

python - 需要让 Subprocess 通信更好

我也是 python 编程和编程的新手。如果这听起来是一个基本问题,请原谅。

我正在开发一个在 git 上执行 make clean 和 make 的工具。

我正在使用 subprocess 模块来运行这些 make 命令。

一项观察是:我使用通信来查看 make 命令的结果。沟通的问题是,它等待 subprocess.popen 完成然后发送输出。

如果 make 命令运行 30 分钟,则屏幕上没有输出 30 分钟,然后通信发送它在 30 分钟内收集的全部数据。

问题是:有没有办法在标准输出上显示某些内容时从子进程获取输出,然后在屏幕上打印出来?

到目前为止我写的代码是:

对此有什么想法吗?我尝试使用 pexpect.run() 但这对我不起作用......

-维杰

0 投票
2 回答
2081 浏览

python - 在 Windows 上运行 wexpect

我已经在 Windows 7 上安装了 wexpect。现在,当我尝试运行任何命令时,我收到以下错误。我正在使用 MKS 工具包,所以ls是一个有效的命令。

有人可以帮忙吗?

0 投票
1 回答
4656 浏览

python - 如何过滤pexpect的输出

在 python pexpect 中,我想过滤输出。例如,在下面的代码中,我只想打印日期。

实际输出:

预期输出:

0 投票
1 回答
3573 浏览

python - 当调用 pexpect.spawn 时,生成的程序是否立即开始执行?

pexpect.spawn对象在expect(或interact,send等)被调用之前是否处于非活动状态,或者被调用的进程是否立即启动?例如:

print语句发生时,pexpect已经在后台运行了 echo 命令并且只是推迟让它返回,直到expect处理调用?还是在第一次致电或类似情况echo之前没有发生任何事情(尚未运行) ?expect

干杯

0 投票
1 回答
1821 浏览

python - pexpect:从通过 ssh 隧道运行的命令检索日志

我正在尝试使用 pexpect 库编写 python 脚本。

我想做的是如下:

一切都按预期工作,直到最后一行,我在其中为 cmdrun 执行 sendline。此命令是自定义 tcpdump 命令,我希望该命令无限期运行,直到我执行 sendctrl('C') 来杀死它,然后逃离 ssh 隧道。

但是,除非我在 sendline(cmdrun + '\r') 之后放置一个 interact(),否则不会打印 tcpdump 的输出。

无论如何我可以在没有交互的情况下做到这一点,因为我不想要交互式终端控制。我想要的是能够等待一段时间,捕获 tcpdump 输出,然后将 tcpdump 与 ssh 隧道一起杀死。

0 投票
1 回答
437 浏览

python - CPython 不能与 Windows 上生成的 tty 终端很好地交互

每次我尝试使用 winpexpect 来生成终端(例如:openssh,ssh)。如果我这样做winpexpect.winspawn('ssh ...'),我会遇到“不会分配伪终端,因为标准输入不是终端。”。如果我强制使用终端,winpexpect.winspawn('ssh -t -t ...')那么即使 ssh 客户端真的连接到服务器,我的读取缓冲区也不会得到任何信息。其他交互式终端也是如此,它们只是挂起,读取缓冲区中没有任何显示。但是对于终端的命令,例如pingwinpexpect 有效。

我发现真正起作用的是使用 putty 的 plink.exe winpexpect.winspawn('plink ...',. 这与 putty.exe 相同,但它不进行终端仿真,我只获取原始 telnet/解密的 ssh 数据。然而,这并不是真正理想的解决方案。

我真的很困惑如何让一个 spawner/expect 库与 Windows 上的终端一起工作!我什至尝试过使用expectJ,只是纯Java,这也有同样的问题。

0 投票
1 回答
2709 浏览

python - 为什么执行某些命令后 Pexpect 会间歇性挂起(未检测到 EOF)?

语境:

我有一些使用 编写的代码pexpect,其工作是提供命令的“实时”输出。即当命令生成一些输出时或不久之后打印一些东西,而不是等到命令完成然后与它的输出交互。

我所做的只是启动和停止服务。我通过spawning 进程来做到这一点,然后在打印时输出每一行,如下所示:

这段代码应该只是循环服务:一遍又一遍地启动和停止它,打印启动/停止的输出。它可以很好地打印输出。但是,它最终会在“OUT 2”之前挂起。我可以查看输出,并看到service调用停止执行。但是,该watch函数永远不会引发 EOF 并退出。

并非每项服务都会发生这种情况。一些服务无限循环。zend-server但是,与其他一些不相关的命令一起,以相同的方式间歇性地失败。

通过“最终挂起”,我的意思是它启动/停止服务几次(每次运行时可变),然后挂起。它通常在 4 到 6 点后起泡,但从来没有在第一次通话时出现 - 至少在第二次通话时(因此del声明;我想我会稳妥行事)。

Python 2.6.6、CentOS (64) 6.3、Pexpect 2.3-6、FWIW

问题:

为什么pexpect挂在某些命令上?我应该如何解决这个问题?使用超时不是一个可行的解决方案,因为其中一些命令确实可以运行任意长时间。service zend-server stop只是我选择的一个例子,因为它不需要那么长时间,我可以观察它完成。

我试过的:

我尝试用以下方法替换该watch方法,该方法使用expect('\n'),但结果是相同的:重启次数可变,然后最终挂起。

我也可以添加pexpect.EOF到与expect一起编辑的数组中\n,并处理返回值以跳出循环,它仍然挂在同一个地方。