06. juli 2012 - 13:47Der er
4 kommentarer og 1 løsning
Python: Custom stdout
Jeg bruger pt. pexpect i mit script, til at uploade filer med, via. SCP.
Variablen htmlOut er enten 0 eller 1, alt afhængigt af om scriptet bliver kaldt via CGI/Web eller via shell.
Hvis jeg overskriver sys.stdout instancen med min egen StdOut som tilføjer "<br />" til hver linie. Bruger jeg den "originale" sys.stdout uden at overskrive, virker koden fint.
Årsagen til at jeg vil overskrive funktionen, er at PExpect ikke laver HTML linebreaks, når den sender outputtet fra SCP-kaldet.
PExpect kode: child = pexpect.spawn ('scp "/home/daniel/p/'+filename+'" '+ user +'@'+ IP +':/tmp') child.expect ('password:') child.sendline (passwd) child.logfile = sys.stdout
child.expect('100%', timeout=3600)
StdOut kode:
class StdOut(object): global htmlOut def __init__(self,txtctrl): self.txtctrl = txtctrl def write(self,string): if hmtlOut == 1: self.txtctrl.write('<br />'+ string) else: self.txtctrl.write(string)
sys.stdout = StdOut()
Nogen der kan hjælpe med at få det til at virke? :)
Men når PExpect kalder sys.stdout laver den ikke nogen "<br />" tags.
Når det kører igennem Shell, overskriver outputtet fra SCP den samme linie igen og igen, går udfra at det er dét som er det egentlige problem?
Når det kaldes via CGI sender den en ny linie for hver gang SCP opdaterer outputtet, selvfølgelig uden at overskrive den tidligere linie, da det jo ikke kan ske via HTTP. :)
Havde helt glemt det her spg... Arne, du må meget gerne smide et svar. Bruger funktionen i stor stil. :)
Nåede aldrig helt at få den til at formatere SCP outputtet, men tror at det skyldes at den faktisk ikke sender \n efter hver besked, hvilket jeg jo nemt ville kunne tilføje med funktionen ovenfor.
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.