2016-09-26 76 views
0

我使用的代碼this question打印熱愛普生TM-T82打印機,但是當我用tkintermainloop()蟒蛇修改了它不direcly印出我的數據,直到我閉上佈局GUI。我希望這個腳本可以打印出我的數據,而不需要關閉佈局GUI。如何打印與POPEN打印機和GUI的Tkinter

這是我的代碼:

import subprocess 
from Tkinter import * 

class tes_print: 
    def __init__(self): 
     self.printData() 

    def printData(self): 
     data = " MY TEXT " 
     lpr = subprocess.Popen("/usr/bin/lpr", stdin=subprocess.PIPE, shell=True) 
     lpr.stdin.write(data) 

root = Tk() 
app2 = tes_print() 
root.mainloop() 
+0

'shell = True'在這裏沒有任何用處。你不需要一個shell來運行一個命令(儘管你需要把'lpr'放在列表中:'subprocess.Popen(['lpr'],stdin = subprocess.PIPE)' – tripleee

+0

你的代碼沒有調用'printData',我不會指望它寫任何東西。 – Goyo

回答

0

遇到緩衝。 write將寫入一個實際上沒有傳遞到lpr的緩衝區,直到它填滿或您明確地將其刷新。

運行lpr.communicate()將刷新它並允許lpr運行完成。

lpr = subprocess.Popen(['lpr'], stdin=subprocess.PIPE) 
stdout, stderr = lpr.communicate(input=data)