0

我正在使用 libdmtx 使用以下代码从 png 文件中读取 2D 代码:

#!/usr/bin/python
import os
import Tkinter
from Tkinter import *
from tkFileDialog import askopenfilename

top = Tkinter.Tk()
top.geometry("200x200")
content = StringVar()
label = Message( top, textvariable=content, width='180' )
content.set ("Choose file to read 2D code")
label.pack()

def selector():
   filename = askopenfilename() 
   cmd = "dmtxread -n %s" % (filename)
   res = Text(top)
   res.insert (INSERT, os.system(cmd))
   res.pack()

B = Tkinter.Button(top, text ="Choode file", command = selector)
B.pack()

top.mainloop()

一切正常,但在 GUI 中我无法获得完整的输出。只有 0,但在控制台中我得到了 2D 代码中的内容。我应该怎么做才能在 GUI 中获得完整的输出?

4

1 回答 1

2

那是因为os.system不返回stdout你执行的命令的,它只是返回它的退出状态,在这种情况下是0.

您应该使用该subprocess模块,如下所示:

import subprocess

def selector():
    filename = askopenfilename() 
    p = subprocess.Popen(["dmtxread", "-n", filename], stdout=subprocess.PIPE)
    stdout, stderr = p.communicate()
    res.insert(INSERT, stdout)
    res.pack()
于 2013-04-12T12:13:54.280 回答