python-3.x - 如何执行带有python输入的shell程序?
问题描述
首先,我使用的是 Ubuntu 20.04 和 Python 3.8。我想运行一个接受命令行输入的程序。我设法使用 os.system() 命令从 python 启动程序,但启动程序后无法发送输入。有问题的程序是使用 CubeSat 空间协议 (CSP) 作为语言的产品界面应用程序。但是,使用的输入被编码在一个带有相应 .h 标头的 .c 文件中。
在 shell 中,它看起来像这样: 启动程序
在 python 中,它看起来像这样:
import os
os.chdir('/home/augustin/workspaceGS/gs-sw-nanosoft-product-interface-application-2.5.1')
os.system('./waf')
os.system('./build/csp-client -k/dev/ttyUSB1')
os.system('cmp ident') #cmp ident is typically the kind of command that does not work on python
输出与shell中的输出相同,但没有“cmp ident输出”,也就是说我无法使用csp-client#
正如您可能看到的,我是一个真正的初学者,试图尽可能清晰和精确。如果需要,我当然可以尝试提供更多信息。谢谢你的帮助 !
解决方案
听起来该pexpect
模块可能是您正在寻找的东西,而不是使用os.system
它来控制其他应用程序并像人类使用它们一样与它们交互。它的文档可在此处获得。但是你想要的可能看起来像这样:
import pexpect
p = pexpect.spawnu("/home/augustin/workspaceGS/gs-sw-nanosoft-product-interface-application-2.5.1/build/csp-client -k/dev/ttyUSB1")
p.expect("csp-client")
p.sendline("cmp indent")
print(p.read())
p.close()
推荐阅读
- python - WiringPi ODROID C2 Python 读取模拟输入
- bash - 展开执行另一个别名的别名(嵌套别名)
- jakarta-ee - Websocket 连接建立错误:net::ERR_CONNECTION_REFUSED 'wss://'
- python - Flask-SQlAlchemy Query 在生产和开发配置之间不一致
- vba - 使用 VBA 搜索范围并将行的值返回给用户表单
- perl - 如何使用散列在 perl 中将文件中的名称更改为另一个名称?
- amp-html - amp-story-grid-layer 设置为填充,但图像从顶部和底部被切断
- scala - Scala Cats 异步函子
- powershell - 使用现有的根证书颁发机构签署证书
- c# - 在 asp.net 核心中读取和加载配置到自定义对象时出现问题