首页 > 解决方案 > 如何执行带有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#

正如您可能看到的,我是一个真正的初学者,试图尽可能清晰和精确。如果需要,我当然可以尝试提供更多信息。谢谢你的帮助 !

标签: python-3.xshellcommand-line-interfaceos.systemcubesat-protocol

解决方案


听起来该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()

推荐阅读