我有一个非常简单的问题,但似乎无法在任何地方获得简单的解决方案。 我有一个在我的Pi上运行的应用程序,我首先键入终端并传递一些参数。例如:
sudo $HOME/Projects/myExampleApp MD_DWNC2378
这导致控制台应用程序启动并按预期启动,可以进行键盘输入。
现在,我想要做的是重复目前为止从python应用程序中描述的过程。我的python应用程序应该能够在终端中打开myExampleApp,获取对控制台窗口的引用,然后将我的Python应用程序中的任何命令作为键盘按下指向myExampleApp。
在Windows平台上,pywinauto库可以完成这项工作。
在我的Pi 3上运行我所描述的操作的最佳选择是什么?
任何建议都会非常有用。
答案 0 :(得分:0)
查看https://docs.python.org/2/library/cmd.html接收命令。您的应用程序可以按照其他用户的建议使用子进程运行:
import cmd
import sys
import subprocess
class Controller(cmd.Cmd):
cmd = 'while true; do cat /dev/stdin;sleep 1;done'
p = subprocess.Popen(cmd, stdout=subprocess.PIPE, stdin=subprocess.PIPE, shell=True)
def default(self, cmd):
self.p.stdin.write(cmd+"\n")
a=self.p.stdout.readline()
sys.stdout.write("subprocess returned {}".format(a))
sys.stdout.flush()
if __name__ == '__main__':
try:
Controller().cmdloop()
except:
print('Exit')
运行此脚本将显示CLI界面。发送的任何命令都将转发到应用程序的stdin(由显示的shell脚本模拟)。
如果您不需要处理返回的标准输出,则可以跳过self.p.stdout.readline()
来电。如果需要返回数据,将readline()调用更改为read()可能会有所帮助,这将在应用程序发送EOF之前读取。
使用sudo运行python脚本可能可以克服应用程序的sudo要求。我不是安全专家,但要注意以sudo运行脚本的安全风险,以及Popen
调用的shell = True参数。