Python, uzeti ispis drugog programa.

poruka: 12
|
čitano: 2.503
|
moderatori: XXX-Man, vincimus
1
+/- sve poruke
ravni prikaz
starije poruke gore
14 godina
neaktivan
offline
Python, uzeti ispis drugog programa.

Ovako, prvi put trebam pomoć, pa se nadam da postoji kakav pythonovac ovuda.

 

Radim na GUI-evaluatoru zadataka, radim ga u Pythom/Glade - u.

Evaluator sam vec napravio u bash/batch - u, te radi samo u terminalu odnosno cmd-u.

 

Evaluator radi sljedece :

 

Određena osoba napise određeni kod za određeni problem. Recimo zbrajanje.

Taj pogram uzme iz stdin-a 2 broja te ispise njihov zbroj. Kod rjesenja pisan je u C/C++/Pascal/Java, no to nije bitno.

Ja cu njemu slati preko linije input.

 

u shellu to izgleda ovako :

./<ime_programa> < input.txt > output.txt

 

i sada ja znam koji je output jer ga imam spremljenog u rjesenje.txt, pa samo usporedim s output.txt i znam radili program tocno ili krivo.

 

 

Sto ne znam ....

Mene interesira kako cu pomocu pythona napraviti da uhvatim ispis drugog programa ili skripte pa ga ispisem u nekekav text_box.

Napr. ako pokrenem program s inputom 2 i 2 i on ispise 4, ja zelim uhvatiti njegov ispis, koji ide u stdout inace, i ispisati ga u gui text_field.

 

Poruka je uređivana zadnji put čet 24.3.2011 23:01 (Budimir).
 
0 0 hvala 0
14 godina
neaktivan
offline
Python, uzeti ispis drugog programa.

Drugim rijecima, trebam nesto sto ce biti kao terminal tj, da se simultano ispisuje, a ne da se sve ispise kada se zavrsi.

 

out = os.popen('./script', 'r')

 

ovo ce raditi, ali ce se sve ispisati tek kada skripta zavrsi svoj posao, a ja bi htio da se to ispisuje u "real time", ako me razumijete.

 

all = ""

 

while 1 :

  line = out.readline()

  if not line : break

  all += line

 

print all

 
0 0 hvala 0
15 godina
neaktivan
offline
Python, uzeti ispis drugog programa.

Probaj sa subprocess modulom. os.popen je zastarjela funkcija.

 

 
0 0 hvala 0
14 godina
neaktivan
offline
Re: Python, uzeti ispis drugog programa.

Napisao sam nesto ovako :

 

import subprocess as sub
out = sub.Popen( './script', stdin=sub.PIPE, stdout=sub.PIPE )
output, error = out.communicate()
print output 

 

ali i to mi vrati kada sve zavrsi, ja bi volio da mogu direktno to ispisivti na ekran.

 

Dakle skripta ispise : "Entering first map ..."

Ja bi to odmah volio ispisati na ekran u text_box, a ne kada sve zavrsi ...

 

Aki ima jos neki nacin s ovim subprocessom recite, jer sam poprilicno nov u pythonu.

15 godina
neaktivan
offline
Python, uzeti ispis drugog programa.

Evo primjer.

 

 
1 0 hvala 1
14 godina
neaktivan
offline
Python, uzeti ispis drugog programa.
Hvala puno !
 
0 0 hvala 0
14 godina
neaktivan
offline
Python, uzeti ispis drugog programa.

EDIT : Popravljeno !!

Poruka je uređivana zadnji put sub 26.3.2011 15:44 (Budimir).
 
0 0 hvala 0
15 godina
neaktivan
offline
Python, uzeti ispis drugog programa.

poceo sam uciti python sinoc i sada sam neki kalkulator napravio :D

nego, treba mi za pomoc ako netko ima neki pdf ili ista takvoga sa kolekcijom svih komandi sta se mogu u python upisati, ima na python.org, ali nije moguce skinuti jbg... ako moze pomoc netko?

 

mjenjam sobnu lampu za dvosobnu..
Moj PC  
0 0 hvala 0
15 godina
neaktivan
offline
Re: Python, uzeti ispis drugog programa.
Look at you, hacker. A pathetic creature of meat and bone, panting and sweating as you run through my corridors. How can you challenge a perfect, immortal machine?
14 godina
neaktivan
offline
Python, uzeti ispis drugog programa.

Hmm, sys.stdout mogu overridati svojim objektom, ali ne i subprocess.Popen.stdout. Zna li netko zasto ??

 
0 0 hvala 0
15 godina
neaktivan
offline
Re: Python, uzeti ispis drugog programa.
Budimir kaže...

Hmm, sys.stdout mogu overridati svojim objektom, ali ne i subprocess.Popen.stdout. Zna li netko zasto ??

 

Zato jer je subprocess.Popen.stdout privatna varijabla, vidljiva samo unutar Popen klase.

 

subprocess.py

14 godina
neaktivan
offline
Re: Python, uzeti ispis drugog programa.

Da, ali ja svejedno pristupam Popen.stdout-u samo preko parametra u konstruktoru, a svejedno mi kaze da je wrong file description.

kako sto si napisao u primjeru subprocess.Popen('', stdout = MyClass()), dok ovo radi subprocess.Popen('', stdout = sys.__stdout__).

1
Nova poruka
E-mail:
Lozinka:
 
vrh stranice