Pi 3上的Python打开并控制控制台应用程序

时间:2017-08-09 20:09:42

标签: python linux automation

我有一个非常简单的问题,但似乎无法在任何地方获得简单的解决方案。 我有一个在我的Pi上运行的应用程序,我首先键入终端并传递一些参数。例如:

sudo $HOME/Projects/myExampleApp MD_DWNC2378

这导致控制台应用程序启动并按预期启动,可以进行键盘输入。

现在,我想要做的是重复目前为止从python应用程序中描述的过程。我的python应用程序应该能够在终端中打开myExampleApp,获取对控制台窗口的引用,然后将我的Python应用程序中的任何命令作为键盘按下指向myExampleApp。

在Windows平台上,pywinauto库可以完成这项工作。

在我的Pi 3上运行我所描述的操作的最佳选择是什么?

任何建议都会非常有用。

1 个答案:

答案 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参数。