Yapmaya çalıştığım şey, bazı terminal komutlarının çıktısını bir wx.TextCtrl widget'ına yazdırmaktır. Bunu başarmanın en kolay yolunun özel bir stdout sınıfı oluşturması ve yazım işlevini widget'ınkiyle aşırı yüklemesi olduğunu düşündüm.Özel bir sys.stdout sınıfı oluşturma?
stdout'u sınıfı:
class StdOut(sys.stdout):
def __init__(self,txtctrl):
sys.stdout.__init__(self)
self.txtctrl = txtctrl
def write(self,string):
self.txtctrl.write(string)
Sonra bir şey yapacağını örneğin:
sys.stdout = StdOut(createdTxtCtrl)
subprocess.Popen('echo "Hello World!"',stdout=sys.stdout,shell=True)
Ne sonuçları aşağıdaki hatadır:
Traceback (most recent call last):
File "mainwindow.py", line 12, in <module>
from systemconsole import SystemConsole
File "systemconsole.py", line 4, in <module>
class StdOut(sys.stdout):
TypeError: Error when calling the metaclass bases
file() argument 2 must be string, not tuple
herhangi bir fikir bu olur düzeltmek için Takdir edilmek
Bunu denedim ve sonuçlandı: traceback (son En son çağrı): ' "! Merhaba Dünya" echo' OnNew subprocess.Popen (içinde Dosya "blade_gui.py", hat 179, stdout'u = sys.stdout, shell = Doğru) Dosya "C: \ Python26 \ lib \ subprocess.py", satır 614, in __init__ errread, errwrite) = self._get_handles (stdin, stdout, stderr) Dosya "C: \ Python26 \ lib \ subprocess.py ", satır 734, _get_handles içinde c2pwrite = msvcrt.get_osfhandle (stdout.fileno()) AttributeError: 'StdOut' nesnesinin 'fileno' özniteliği yok – Duck
' alt işlem ', herhangi bir dil (sadece Python değil!) ve "gerçek işletim sistemi düzeyinde bir dosyaya" ihtiyaç duyar. ., bir FD ile, aynı zamanda fileno olarak da bilinir) - gerçek bir OS seviyesinde dosya (neyse ki, alt süreç dahil) dışında altprocess.Popen 'stdout = 'gibi bir şey iletmenin hiçbir yolu yoktur.PIPE, ebeveyn işleminizin çocuk sürecinin çıktısını almasına izin verir - ancak, çocuk işleminde arabelleğe alma genellikle istediğinizi değil, bu yüzden her zaman “pexpect” veya “wexpect” kullanmayı öneririm. –
sadece yazmadan daha fazlasına ihtiyacınız var, aynı zamanda “ne zaman kullanılır”, belki de başkalarının nasıl kullanılacağına bağlı olarak. – SimplyKnownAsG