2014-10-08 96 views
1

我一直在試圖學習如何使用Kivy python,我想 知道如何與Os控制檯/終端進行交互以運行命令,並且 會收到結果。目前爲止我看到的教程僅顯示如何創建 小部件,按鈕等 例如,如何從運行顯示在kivy中的命令「uname」 獲得結果。下面有這樣的代碼。使用「按下」。我如何讓它與操作系統交互運行命令並將其顯示回kivy應用程序。是否有創建桌面應用/公用事業如何獲取控制檯輸出使用kivy打印

任何教程
from kivy.app import App 
    from kivy.uix.button import Button 

    class tutap(App): 
     def build(self): 
      return Button(text="Press here") 

    tutap().run() 

更新: 這裏是例子我試着去achieve.This什麼使用easygui模塊:

import subprocess 
    from easygui import * 
    msg= "what you want" 
    out = subprocess.check_output("uname -a",shell=True) 
    title = "My choice" 
    choices=["kernel version","nothing"] 
    choice=boolbox(msg,title,choices) 
    if choice==1: 
     msgbox(out) 
    elif choice==0: 
     msgbox("The End") 
+0

[從python運行shell命令並捕獲輸出]可能的重複(http://stackoverflow.com/questions/4760215/running-shell-command-from-python-and-capturing-the-output) – 2014-10-08 19:48:13

+0

不可以只是獲取控制檯輸出..但使用可以與控制檯交互的kivy構建一個gui應用程序 – mikie 2014-10-08 20:00:35

+0

如果您剛剛學習kivy,這聽起來像是一個相當複雜的項目。也許,子進程模塊可以幫助? Google subprocess.call – Totem 2014-10-08 22:53:19

回答

0

在這裏,我怎麼去有關獲取控制檯命令的輸出。

的Python代碼第一:

from kivy.app import App 
    from kivy.uix.boxlayout import BoxLayout 
    from kivy.uix.popup import Popup 
    from kivy.properties import ObjectProperty 
    from kivy.uix.label import Label 
    import subprocess 

    class shellcommand(BoxLayout): 
     first=ObjectProperty() 
     second=ObjectProperty() 
     third=ObjectProperty() 

     def uname(self): 
      v=subprocess.check_output("uname -a",shell=True) 
      result=Popup(title="RESULT",content=Label(text="kernel is\n" + v)) 
      result.open() 
     def date(self): 
      d=subprocess.check_output("date",shell=True) 
      res=Popup(title="DATE",content=Label(text="the date today is\n" + d)) 
      res.open() 
     def last(self): 
      last=subprocess.check_output("w",shell=True) 
      ls=Popup(title="LOGIN",content=Label(text="logged in \n" + last)) 
      ls.open() 


    class shellApp(App): 
     def build(self): 
      return shellcommand() 

    shellApp().run() 

然後是kivy文件名爲shellapp.kv

<shellcommand>: 
orientation: "vertical" 
first:one 
second:two 
third:three 
canvas: 
    Rectangle: 
     source: "snaps.png" #location of any picture 
     pos: self.pos 
     size: self.size 



BoxLayout: 
    orientation: "horizontal" 
    Button: 
     id:one 
     text: "UNAME" 
     background_color: 0,0,0,1 
     font_size:32 
     size_hint:1,None 
     on_press: root.uname() 


    Button: 
     id:two  
     text: "DATE" 
     background_color: 1,1.5,0,1 
     font_size:32 
     size_hint:1,None 
     on_press: root.date() 


    Button: 
     id: three 
     text: "LOGGED IN" 
     background_color: 1,0,0,1 
     font_size:32 
     size_hint: 1,None 
     on_press: root.last() 

如果沒有改善這種代碼,請讓我知道路怎麼to.Thanks

+0

不是_單行文檔_,而不是_ **一個** _ – Nearoo 2017-02-18 23:17:03

0

我真的不看點做這樣的事情,但如果你想你可以在單獨的線程中調用App.run()方法,所以它不會阻止命令行。

使用cmd模塊的示例:

import logging 
logging.getLogger("kivy").disabled = True 

from kivy.app import App 
from kivy.uix.listview import ListView 

from cmd import Cmd 
from threading import Thread 

class MyApp(App): 
    def build(self): 
     self.lv = ListView() 
     return self.lv 

    def update(self, line): 
     self.lv.adapter.data.append(line) 
     return "list updated" 

class MyCmd(Cmd, object): 
    def __init__(self, app, *args): 
     super(HelloWorld, self).__init__(*args) 
     self.app = app 

    def do_EOF(self, line): 
     self.app.stop() 
     return True 

    def default(self, line): 
     ret = self.app.update(line) 
     print(ret) 

if __name__ == '__main__': 
    app = MyApp() 
    Thread(target=app.run).start() 
    MyCmd(app).cmdloop() 
0

我能想到的最簡單的方法就是寫一個函數,寫入文件頂部的文件,就像這樣

def printlog(message): 
    with open('./log.txt','a') as f: f.write(message+"\n") 

然後在你的程序時,你永遠要打印出來把簡單的把printlog("whatever you wanted printed!")

文件將被保存在同一文件夾作爲程序。 在程序運行時,理論上可以打開更多的程序,但作爲後期程序,這更有用。

相關問題