问题标签 [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.
python - python pexpect sendcontrol 关键字符
我正在使用 pythons pexpect 模块来自动执行任务,我需要帮助来确定要与 sendcontrol 一起使用的关键字符。怎么能发送控制键 ENTER ?以及如何找到关键字符以供将来参考?
这是我正在处理的代码。
python - 在预期交互方面几乎不需要帮助
使此代码与 pexpect 模块一起工作几乎不需要帮助。
此代码通过登录服务器执行 git pull,然后下载最新代码(如果升级可用),或者只是发送一条消息说“已经是最新的”。
该代码实际上识别了密码屏幕,但没有识别文本“已经是最新的”
不知道我是否在这里遗漏了什么。
代码片段是:
任何帮助是极大的赞赏。
谢谢,-维杰
java - Java的Pexpect等价物?
java有没有pexpect等价物?我知道我可以通过使用 commons exec 或 processbuilder 并重定向 stdin/stdout 然后解析流等来复制功能但是,我的问题是,是否有一个即插即用的等价物?
我想要像在 python 中那样运行交互式命令行程序。一个小例子是:
然后我以交互方式使用 myProg(发送命令、获取/解析结果等)。我可以通过 myProg.before 等获得两次调用之间的结果。
是否有一个包可以在 java 中以相同的简单方式提供相同的功能?
python - 需要让 Subprocess 通信更好
我也是 python 编程和编程的新手。如果这听起来是一个基本问题,请原谅。
我正在开发一个在 git 上执行 make clean 和 make 的工具。
我正在使用 subprocess 模块来运行这些 make 命令。
一项观察是:我使用通信来查看 make 命令的结果。沟通的问题是,它等待 subprocess.popen 完成然后发送输出。
如果 make 命令运行 30 分钟,则屏幕上没有输出 30 分钟,然后通信发送它在 30 分钟内收集的全部数据。
问题是:有没有办法在标准输出上显示某些内容时从子进程获取输出,然后在屏幕上打印出来?
到目前为止我写的代码是:
对此有什么想法吗?我尝试使用 pexpect.run() 但这对我不起作用......
-维杰
python - 在 Windows 上运行 wexpect
我已经在 Windows 7 上安装了 wexpect。现在,当我尝试运行任何命令时,我收到以下错误。我正在使用 MKS 工具包,所以ls
是一个有效的命令。
有人可以帮忙吗?
python - 如何过滤pexpect的输出
在 python pexpect 中,我想过滤输出。例如,在下面的代码中,我只想打印日期。
实际输出:
预期输出:
python - 当调用 pexpect.spawn 时,生成的程序是否立即开始执行?
pexpect.spawn
对象在expect
(或interact
,send
等)被调用之前是否处于非活动状态,或者被调用的进程是否立即启动?例如:
当print
语句发生时,pexpect
已经在后台运行了 echo 命令并且只是推迟让它返回,直到expect
处理调用?还是在第一次致电或类似情况echo
之前没有发生任何事情(尚未运行) ?expect
干杯
python - pexpect:从通过 ssh 隧道运行的命令检索日志
我正在尝试使用 pexpect 库编写 python 脚本。
我想做的是如下:
一切都按预期工作,直到最后一行,我在其中为 cmdrun 执行 sendline。此命令是自定义 tcpdump 命令,我希望该命令无限期运行,直到我执行 sendctrl('C') 来杀死它,然后逃离 ssh 隧道。
但是,除非我在 sendline(cmdrun + '\r') 之后放置一个 interact(),否则不会打印 tcpdump 的输出。
无论如何我可以在没有交互的情况下做到这一点,因为我不想要交互式终端控制。我想要的是能够等待一段时间,捕获 tcpdump 输出,然后将 tcpdump 与 ssh 隧道一起杀死。
python - CPython 不能与 Windows 上生成的 tty 终端很好地交互
每次我尝试使用 winpexpect 来生成终端(例如:openssh,ssh
)。如果我这样做winpexpect.winspawn('ssh ...')
,我会遇到“不会分配伪终端,因为标准输入不是终端。”。如果我强制使用终端,winpexpect.winspawn('ssh -t -t ...')
那么即使 ssh 客户端真的连接到服务器,我的读取缓冲区也不会得到任何信息。其他交互式终端也是如此,它们只是挂起,读取缓冲区中没有任何显示。但是对于终端的命令,例如ping
winpexpect 有效。
我发现真正起作用的是使用 putty 的 plink.exe winpexpect.winspawn('plink ...'
,. 这与 putty.exe 相同,但它不进行终端仿真,我只获取原始 telnet/解密的 ssh 数据。然而,这并不是真正理想的解决方案。
我真的很困惑如何让一个 spawner/expect 库与 Windows 上的终端一起工作!我什至尝试过使用expectJ,只是纯Java,这也有同样的问题。
python - 为什么执行某些命令后 Pexpect 会间歇性挂起(未检测到 EOF)?
语境:
我有一些使用 编写的代码pexpect
,其工作是提供命令的“实时”输出。即当命令生成一些输出时或不久之后打印一些东西,而不是等到命令完成然后与它的输出交互。
我所做的只是启动和停止服务。我通过spawn
ing 进程来做到这一点,然后在打印时输出每一行,如下所示:
这段代码应该只是循环服务:一遍又一遍地启动和停止它,打印启动/停止的输出。它可以很好地打印输出。但是,它最终会在“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
,并处理返回值以跳出循环,它仍然挂在同一个地方。