Δημοσιεύτηκε: 22 Ιουν 2012, 02:25
από medigeek
Το 2>&1 και τα άλλα είναι shell specific... χρειάζεσαι bash για να εκτελεστεί σωστά. :)
Βασικά στέλνει και κατευθύνει ό,τι γράφεται στο std error (2) να γραφτεί στο std out (1)

stderr.py -- Στέλνει χαρακτήρες στο standard error (stderr):
Μορφοποιημένος Κώδικας: Επιλογή όλων
import sys, time
for i in range(1,5):
if (i%2):
sys.stderr.write("prints time=3.80 and some other stuff\n")
else:
sys.stderr.write("test\n")
time.sleep(2)


test.py:
Μορφοποιημένος Κώδικας: Επιλογή όλων
import subprocess
import sys
import re

child = subprocess.Popen("python stderr.py", shell=True, stderr=subprocess.PIPE)
complete = False
while True:
out = child.stderr.readline()
out = out.strip()
if out == '' and child.poll() != None:
break
m = re.search("time=([0-9.]+)", out)
if out != '' and m and m.group(1):
print("Time left: {0}".format(m.group(1)))


Τα βάζεις στον ίδιο φάκελο και εκτελείς το test.py
Αν δεν θέλεις το stderr, αλλά το stdout, τότε αλλάζεις το stderr με το stdout.

Πηγή: http://stackoverflow.com/questions/2525 ... ess-output