Ausgabe aus Konsole holen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

Donnerstag 8. Januar 2009, 22:07

Und zwar, will ich die Ausgabe vom Terminal in mein Python Programm bekommen, also mit Terminal Ausgabe (Benutze Linux) meine ich, z.B.: wenn ich einen subprocess gestartet habe, und der irgendwann irgendetwas zurück ins Terminal gibt, wie bekomme ich das dann in mein Python Programm? sprich in eine variable?
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 8. Januar 2009, 22:14

Via ``subprocess.Popen``. Suchfunktion verrät Details.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

Donnerstag 8. Januar 2009, 22:39

ähm, mit dem subprocess öffne ich ja nur einen prozess, aber das war nicht gemeint. Ich meinte wie ich eine Ausgabe vom Terminal bekomme bzeiehungsweise halt Konsole
busfahrer
User
Beiträge: 111
Registriert: Donnerstag 9. Oktober 2008, 17:42

Donnerstag 8. Januar 2009, 22:44

Hallo

@Leonidas hat dir das meiste doch schon verraten.

Guck doch mal hier http://pydoc.org/2.5.1/subprocess.html


Gruß...busfahrer
Alles wird gut ;-)
Benutzeravatar
snafu
User
Beiträge: 5537
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Donnerstag 8. Januar 2009, 22:46

Um mal die Doku zu zitieren...
Replacing /bin/sh shell backquote
---------------------------------
output=`mycmd myarg`
==>
output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
shcol (Repo | Doc | PyPi)
EyDu
User
Beiträge: 4871
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Donnerstag 8. Januar 2009, 22:47

Na mit dem stdout-Parameter von Popen.
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

Donnerstag 8. Januar 2009, 22:59

Also bei mir kommt bei

Code: Alles auswählen

output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0]
syntax error
Benutzeravatar
snafu
User
Beiträge: 5537
Registriert: Donnerstag 21. Februar 2008, 17:31
Wohnort: Gelsenkirchen

Donnerstag 8. Januar 2009, 23:01

Tja, Popen und PIPE gehören nun mal zum subprocess-Modul. Abhilfe schafft z.B.:

Code: Alles auswählen

from subprocess import Popen, PIPE
shcol (Repo | Doc | PyPi)
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 8. Januar 2009, 23:04

Das erklärt aber nicht den angeblichen Syntax-Error! Da würde eher ein NameError geworfen ...

Ich kann das aber auch nicht nachvollziehen ... evtl. copy & paste Fehler?
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

Donnerstag 8. Januar 2009, 23:09

So wollte ich das mal ausprobieren:

Code: Alles auswählen

#!/usr/bin/env python

import sys
import subprocess
process="firefox"
subprocess.Popen(process)
print
print
print
print
print
output=`mycmd myarg`
output = Popen(["mycmd", "myarg"], stdout=PIPE).communicate()[0])
print output
print
print
print
print 
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 8. Januar 2009, 23:13

omg ... das sieht ja ***** aus.

Zunächst einmal kommt der Syntax-Fehler aus Zeile 12 - die hat ja mal nichts mit dem Hinweis zu tun, der Dir gegeben wurde! Probiere das doch einfach in einer Python-Shell aus - ohne sinnfreien Code drum herum.

Im Grunde brauchst Du ja nur snafus import Code und die Zeile 13. Natürlich musst Du "mycmd" gegen ein existierendes Kommando austauschen, gleiches gilt für "myargs". Probiere doch einfach mal "dir" aus (oder "ls" unter Linux).

EDIT: Zeile 13 sieht bei dir auch falsch aus! Schau Dir doch mal das exakte Posting davon oben an ...
Zuletzt geändert von Hyperion am Donnerstag 8. Januar 2009, 23:15, insgesamt 1-mal geändert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Donnerstag 8. Januar 2009, 23:15

Der Syntaxerror kommt von Zeile 12, Backticks sind nun mal so in Python nicht erlaubt. Das ist ja nicht Bash-Skript. Und ``Popen`` sollte man mit Listen und nicht mit Strings aufrufen.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 8. Januar 2009, 23:17

Weil ich so lieb bin :-)

Code: Alles auswählen

>>> from subprocess import Popen, PIPE
>>> Popen(["ls"], stdout=PIPE).communicate()[0]
'data\nlaby.py\nlaby.py~\n'
>>>
gugugs
User
Beiträge: 113
Registriert: Dienstag 30. Dezember 2008, 12:38

Donnerstag 8. Januar 2009, 23:18

das heist unter myarg kann ich sowas wie "ls" bez. "dir" verstehen?
und was verstehe ich unter mycmd?

edit: vielen Dank Hyperion
Benutzeravatar
Hyperion
Moderator
Beiträge: 7472
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Donnerstag 8. Januar 2009, 23:21

Lies doch mal einfach die Doku dazu durch! "myargs" ist doch nur ein Beispielstring, der Dir anzeigen sollte, dass man dort einen String angibt, der das Kommando enthält, welches durch Popen ausgeführt werden soll!

"myargs" steht dann für ein Argument, bei "ls" könnte man also so was wie "-l" angeben ...

Man kann natürlich beliebig viele angeben! Insgesamt wird Popen ja eine Liste übergeben, das erste Item der Liste ist eben das Kommando, danach kann man Parameter angeben.
Zuletzt geändert von Hyperion am Donnerstag 8. Januar 2009, 23:22, insgesamt 1-mal geändert.
Antworten