انجمن‌های فارسی اوبونتو

کمک و پشتیبانی => برنامه‌سازی => نویسنده: سید وحید رضا برهانی در 09 شهریور 1394، 05:30 ب‌ظ

عنوان: پایتون:نمایش خروجی ترمینال در برنامه (GUI)
ارسال شده توسط: سید وحید رضا برهانی در 09 شهریور 1394، 05:30 ب‌ظ
من می خوام که خروجی یک فایل BASH رو توی برنامه ام نشون بدم.
من با پایتون اصلا آشنایی ندارم.
بنابه دلایلی من از tkinter برای ساخت GUI استفاده می کنم.
من از python3 استفاده می کنم.
توی جست و جو هایی که انجام دادم با Popen و Text widget باید این کار رو انجام بدم
کدی رو که نوشتم اینطوریه:
text = Text(root)
text.config(stat="normal")
    p = subprocess.Popen('/script-foo.sh',stdout=subprocess.PIPE,stderr=subprocess.STDOUT)
    output , err= p.communicate()
    text.insert("end", output)
    text.config(stat="disable")
این کد کار می کنه ولی برنامه تا زمانی که این اسکریپت فعال هست به هیچی جواب نمی ده.ومشکل دیگه اش اینکه صبر می کنه و یک دفعه ای همه ی خروجی رو چاپ می کنه حالا من یک روش بهتر می خوام که بتونه به طور زنده تر خروجی رو نشون بده.
اسکریپت ام خروجی یک برنامه را مانیتور می کنه پس خروجی خیلی زیاد هست.
عنوان: پاسخ : پایتون:نمایش خروجی ترمینال در برنامه (GUI)
ارسال شده توسط: احمد حمزه ئی در 09 شهریور 1394، 10:28 ب‌ظ
سوال مشابه شما (http://stackoverflow.com/questions/30410421/run-process-with-realtime-output-to-a-tkinter-gui) پرسیده شده، پاسخ آخری رو تست کنید.
عنوان: پاسخ : پایتون:نمایش خروجی ترمینال در برنامه (GUI)
ارسال شده توسط: احمد حمزه ئی در 18 شهریور 1394، 02:32 ق‌ظ
یکم ساده تر فقط دستور مورد نظر رو به جای ping جایگزین کنید.
import threading
import subprocess
from tkinter import Tk
from tkinter.scrolledtext import ScrolledText

def run_process():
cmd = "ping www.ubuntu.ir"
process = subprocess.Popen(cmd.split(), stdout=subprocess.PIPE, stderr=subprocess.STDOUT)

while process.poll() is None:
for line in process.stdout:
text.config(stat="normal")
text.insert("end", line)
text.see("end")
text.config(stat="disable")

root = Tk()
root.title("Ping")

text = ScrolledText(root)
text.pack(expand=True, fill="both")

thread = threading.Thread(target=run_process)
thread.setDaemon(True)
thread.start()

root.mainloop()
عنوان: پاسخ : پایتون:نمایش خروجی ترمینال در برنامه (GUI)
ارسال شده توسط: سید وحید رضا برهانی در 19 شهریور 1394، 07:31 ب‌ظ
سلام
آره اینطوری خیلی بهتر شد.
 من از اون روز ها اسکریپت ام رو با xterm اجرا می کردم اینطوری خروجی «زنده» می شد!
ممنون