问题标签 [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 回答
3413 浏览

python - 关于python中pexpect的问题

我尝试了 pexpect 和 subprocess.Popen 从 python 调用外部长期后台进程(该进程使用套接字与外部应用程序通信),具有以下详细信息。

  1. subprocess.Popen(launchcmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.PIPE) 这工作正常。我不需要做任何其他事情。但是,因为我必须立即获得输出,所以我选择 pexpect 以避免管道文件缓冲区问题。

  2. obj= pexpect.spawn(launchcmd, timeout=None) 启动外部进程后,我使用单独的线程执行“readline”读取启动进程“obj”的输出,一切正常。

  3. obj= pexpect.spawn(launchcmd, timeout=None) 启动外部进程后,我没有做任何进一步的事情,即把它留在那里。虽然,通过使用“ps -e”命令我可以找到启动的进程,但是启动的进程似乎被阻塞并且无法在套接字中与其他应用程序通信。

好的。更具体地说,我放了一些示例代码来制定我的问题。

谁能告诉我第三个选项有什么问题?如果是因为我没有使用单独的线程来操作输出,为什么第一个选项适用于 subprocess.popen?我怀疑 pexpect 使用套接字启动进程有问题,但我不确定,特别是考虑到选项 2 效果很好。

0 投票
0 回答
377 浏览

python - pexpect sftp:源文件作为文件对象

是否可以不读取要从文件系统传输的文件?我从服务器获取文件并希望将它们 sftp 到另一个服务器。我宁愿不先将它们写入文件系统。

有没有办法从文件对象中读取?

0 投票
2 回答
1753 浏览

python - 在预期中捕捉到一个垂死的过程

我正在写一些 pexpect 的东西,基本上是通过 telnet 发送命令。

但是,我的 telnet 会话可能会终止(由于网络问题、电缆被拉断等)。

我如何初始化一个 telnet 会话,如果它死了,我可以捕获它并告诉它重新连接,然后继续执行它所在的代码。

这可能吗?

0 投票
1 回答
1318 浏览

python - 使用 pexpect 跳过孩子的 stdin 和 stderr

我正在使用控制子进程pexpect(因为subprocess 不支持 pty并且我遇到了两个管道的死锁)。该过程在 上创建了很多stderr我不感兴趣的输出,并且显然pexpect还回显了我写给它的任何内容stdin

我怎样才能关闭它?

0 投票
2 回答
147 浏览

functional-programming - 什么是抽象函数的优雅方式——而不是对象?

我有一个通过 telnet/pexpect 登录传感器并充当数据收集器的功能。

我不想重写登录、获取数据并从中解析出相关输出的部分(pexpect)。但是,我需要用这段代码和它收集的数据做不同的事情

例如,我可能需要:

  • 直到返回第一个读数的时间

  • 取不同数量的传感器读数的平均值

  • 返回状态(这是一个数据)或从输出返回传感器读数(这是一个单独的数据)

最终,它仍然应该以相同的方式登录和解析输出,我想为该部分使用一个代码块。

在代码的更高层,它被立即使用。当我调用它时,我知道我需要收集什么类型的数据,仅此而已。构造对象太笨拙了。

我的用法已经超过了向单个函数添加更多参数。

有任何想法吗?

0 投票
1 回答
792 浏览

regex - 为什么 strip() 修复这个 pexpect 脚本?

我有一个对象。

这个对象有一个connect()方法可以产生一个 pexpect 进程。

产生的进程是一个自定义串行接口。启动时,此工具会打印要连接的串行设备菜单,如下所示:

/blockquote>

connect()根据给定的设备名称(例如“acFX9DQf”)确定要传递的数字:(self.connection 是预期生成的)

现在,我的问题是我connect()/kill()该进程在我的主要逻辑中多次,有时,其中一次,意外地connect()决定抛出pexpect.TIMEOUT异常。

例如,当我将以下调试语句添加到我的逻辑时,如下所示:

...我得到这个输出的许多电话connect()

/blockquote>

......那么,我的一个connect()电话会出乎意料地做......

/blockquote>

但是,如果我将代码修改为:

我的问题消失了!我可以反复运行它,不会出现任何问题——没有例外,没有任何问题。

所以这里到底发生了什么?我什至不知道从哪里开始解决这个问题。

0 投票
3 回答
1689 浏览

python - Python:套接字:通过蜂窝网络处理 TCP 连接

我正在用 python 进行一些套接字编程,在其中我开发了一个客户端 TCP/IP 套接字来与慢速嵌入式设备进行通信。所以有时,当响应应该只有一个包时,它被分成两个包。我目前的解决方案是sleep()python 程序,等待确保我需要的所有数据都已经到达。

我想知道是否有更好的方法来处理这种情况?

0 投票
1 回答
783 浏览

python - 通过 ssh 隧道 TCP 端口而不阻塞

我正在尝试使用以下代码通过 pexpect 设置 ssh 隧道:

我期望的是在发送密码并建立 ssh 隧道后,while 循环退出,以便我可以继续处理其他业务逻辑。

但是如果 ssh 隧道建立,上面的代码会阻止 util 超时(大约 30 秒)。

谁能给我一些关于如何避免阻塞的建议?

0 投票
1 回答
1738 浏览

python - pexpect ssh 无法处理命令选项

我正在使用 pexpect ssh 编写脚本进行编译,ssh 自动化看起来像这样,

cmd 是这样的:

问题是它说,

然而,如果使用 commands.getoutput 运行相同的命令,那么它会正确执行。

质疑产生这种错误的问题是什么,我该如何消除这个错误?

提前致谢 :)

0 投票
1 回答
416 浏览

python - 使用 Pexpect 通过命令行将 Python 与 Fortran 连接

我正在使用 pexpect 和 python 创建一个程序,该程序允许用户通过网站与 FORTRAN 程序进行交互。从 FORTRAN 程序我收到错误:

当我尝试:

据我了解,我可能会将 55 发送到错误的输入单元。如何在 Python 中使用 pexpect 正确地将输入发送到 FORTRAN 程序?

谢谢你。


编辑:当 p.sendline 的参数为空(egpsendline())或仅包含空格时,程序按预期进行。在向 FORTRAN 程序发送非空格值时,我是否需要以某种方式指定输入格式?