PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Python: Rückgabe von Shellaufruf unvollständig



wmaker
04-02-2006, 16:56
Hallo zusammen,
ich bin Python-Neuling und bei meinen ersten Experimenten gleich über ein Problem gestolpert wo ich einfach nix zu finde - und zwar kommen Resultate von Shellaufrufen nur unvollständig in Python an.

mein Script:


import os
import string
out=string.join(os.popen("equery l app-admin/eselect-1.0_rc2").readlines())
print out


das passiert wenn ich es aufrufe:


# python test.py
* installed packages
app-admin/eselect-1.0_rc2


und das hätte eigentlich passieren sollen:


# equery l app-admin/eselect-1.0_rc2
[ Searching for package 'eselect' in 'app-admin' among: ]
* installed packages
[I--] [ ] app-admin/eselect-1.0_rc2 (0)


wie man sieht, kommt alles was in runden oder eckigen Klammern steht nicht mit - was sehr betrüblich ist. Hat jemand eine Idee woran das liegt oder besser noch wie ich schaffe, dass doch die komplette Ausgabe in Python ankommt?

Joghurt
05-02-2006, 15:42
Ich vermute mal, dass die eckigen Klammern nicht an stdout, sondern an stderr geschickt werden. In diesem Falle wirst du popen3 verwenden müssen und dann child_stdout und child_stderr getrennt auslesen müssen...

Christoph
06-02-2006, 07:41
Ich vermute mal, dass die eckigen Klammern nicht an stdout, sondern an stderr geschickt werden. In diesem Falle wirst du popen3 verwenden müssen und dann child_stdout und child_stderr getrennt auslesen müssen...
Oder mittels 2>&1 stdout nach stderr umlenken (das klappt allerdings nur, wenn das Argument von popen an die Shell geschickt wird und nicht direkt mit fork & exec ausgeführt wird; da müsste man jetzt in die Python Doku schauen wie das intern implementiert ist).

fuffy
08-02-2006, 11:47
Oder einfach popen4 nehmen.

fs111
09-02-2006, 18:39
BTW: import string ist obsolet, das kann der normale string auch alles, einfach "".join(irgendEineListe)

fs111