Problem: Text in Konsole schreiben (Windows)

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.
Antworten
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Hallo,

Ich habe ein Programm geschrieben, was das freezen von Programmen mit py2exe erleichtern soll.
Ist auch soweit schon alles fertig, nur soll an einer Stelle "C:\\programme\\py2exe_einfach\\compile.py py2exe" in die Konsole geschrieben werden.
Mit os.popen() scheint es zwar irgendwie zu funktionieren, aber es kommt nichs im dist Ordner an...
Wenn ich ein print vor os.popen() setze, kommt folgende Meldung:

Code: Alles auswählen

<open file 'C:\programme\py2exe_einfach\compile.py py2exe', mode 'r' at 0x00A10140>
Das heisst, dass irgendwie eine Verbindung aufgebaut wird... Aber warum kommt die fertige .exe nicht im dist Ordner an? :?

Danke,
Roman

PS: Vielleicht ist der Beitrag jetzt im falschen Forum?
Wenn ja, bitte verschieben... :wink:
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Ähm, wenn du in eine Datei schreiben willst nutzt man file(). Ich weiß jetzt gar nicht warum du da irgendwas mit popen versuchst...
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Oh, Sorry... Ich habe mich wahrscheinlich etwas unklar ausgedrueckt. :oops:
Ich moechte den Text in die Windows-Konsole schreiben.
Und da benutzt man doch normalerweise os.popen(), oder?
Danke,
Roman
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Nein, dafür benutzt man in der Regel print (oder sys.stdout.write)
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Aber print schreibt meinen Befehl doch einfach nur in das Programm - Fenster...
Ich möchte es aber in die Eingabeaufforderung (cmd) schreiben.
(Dachte, das wäre das selbe wie Konsole... :oops: )

MfG,
Roman
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Du willst also ein Programm aufrufen.
Dann suchst du os.system

Wenn dich die Ausgabe des Programmes interessiert (was es schreibt), musst du tatsächlich mit popen arbeiten, allerdings musst du dann auch mit read/readline auslesen ;)
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Genau den Befehl habe ich gesucht! Danke! :D

Gibt es jetzt noch eine Möglichkeit, das DOS Fenster, was aufgerufen wird, zu verstecken, oder so?
Irgendwie kommt das ein wenig unelegant, wenn in einem GUI Programm auf einmal so eine Konsole auftaucht... :)
Danke,
Roman
pr0stAta
User
Beiträge: 271
Registriert: Freitag 17. September 2004, 11:49
Wohnort: Bremen

Wenn du eine einfache py Datei ohne console starten willst,
änder einfach die Dateiendung von .py in .pyw.
Falls du eine .exe über py2exe erstellt hast, kannst du einfach
den console Befehl in der setup.py durch window ersetzen.
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Ja, das weiss ich schon...
Das Problem ist nur, wenn ich os.system() anwende, dann wird die Konsole auch aufgerufen, wenn die Datei eine .pyw ist.
Aber letztendlich ist das auch nur ein kleiner Schönheitsfehler mit dem ich auch leben kann :)

Natürlich wäre es trotzdem schön, wenn jemand eine Lösung dafür hätte.

MfG,
Roman
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Roman hat geschrieben:wenn ich os.system() anwende, dann wird die Konsole auch aufgerufen, wenn die Datei eine .pyw ist.
Hi Roman!

Verwende statt os.system() --> os.spawnl().
Hier ein Beispiel:

Code: Alles auswählen

import os

command = 'C:/winnt/notepad.exe'
args = '"C:/testordner/hallowelt.txt"'
os.spawnl(os.P_WAIT, command, command + ' ' + args)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Hallo Gerold,
Sorry, ich hatte die letzten Tage wenig Zeit, daher habe ich deinen Beitrage erst jetzt gelesen...

Ich möchte die Datei aber nicht "direkt" öffnen, sondern über py2exe.
Also muss der Befehl "C:\\irgendwas\\compile.py py2exe" sein und das gibt bei mir nur Fehlermeldungen, wenn ich es so eingebe...

Code: Alles auswählen

>>> import os
>>> command = "C:\\system32\\cmd.exe"
>>> args = "C:\\programme\\py2exe_einfach\\compile.py py2exe"
>>> os.spawnl(os.P_NOWAIT, command, command + ' ' + args)
Traceback (most recent call last):
  File "<pyshell#26>", line 1, in ?
    os.spawnl(os.P_NOWAIT, command, command + ' ' + args)
  File "C:\Python22\lib\os.py", line 523, in spawnl
    return spawnv(mode, file, args)
OSError: [Errno 2] No such file or directory
(Die Datei existiert und der Pfad ist auch soweit richtig)

Könntest du mir eventuell noch ein Beispiel für so einen Pfad geben?
Danke,
Roman
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi Roman!

So sollte es funktionieren:

Code: Alles auswählen

import os
command = 'C:/Python24/python.exe'
args = '"C:\\programme\\py2exe_einfach\\compile.py" "py2exe"'
os.spawnl(os.P_WAIT, command, command + ' ' + args)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Hallo Gerold,
So, jetzt funktioniert es :D
Danke!!!

Was gibt spawnl eigentlich zurück? Da steht bei mir 152. Was sagt mir dieser Wert?

Bis dann,
Roman :)
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Roman hat geschrieben:Was gibt spawnl eigentlich zurück? Da steht bei mir 152. Was sagt mir dieser Wert?
Dokumentation des OS-Moduls hat geschrieben:this function returns the process ID of the new process
Also sagt dir dieser Wert die PID des Prozesses. Unter Unices könntest du denn damnn mit kill <PID> beenden, oder sonstige Dinge damit machen. Aber das brauchst du wohl eher nicht.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Hi!

Ich habe da noch eine Verbesserung am Code vorgenommen:

Code: Alles auswählen

import os
import sys
command = sys.executable # ='C:/Python24/python.exe'
args = '"C:\\programme\\py2exe_einfach\\compile.py" "py2exe"'
os.spawnl(os.P_WAIT, command, command + ' ' + args)
mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Hallo,
Das mit der Verbesserung ist ja nicht schlecht. Funktioniert dann wohl auch, wenn man Python in ein anderes Verzeichnis installiert hat, oder?

Bei mir gibt executable "pythonw.exe" aus... Woran kann das liegen?
Auch wenns für meine Zwecke im Moment ganz gut ist :D

Code: Alles auswählen

>>> import sys
>>> sys.executable
'C:\\Python22\\pythonw.exe'
Und noch was, auch wenns hier nicht ins Forum passt... Das "

Code: Alles auswählen

" zum Einfügen von Code wird bei immer am Ende des Beitrages eingefügt, sodass ich es immer noch kopieren/einfügen muss. Geht euch das auch so?

Danke für die Mühe,
Roman
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Roman hat geschrieben:Bei mir gibt executable "pythonw.exe" aus... Woran kann das liegen?
Dall liegt daran, dass du dein Script nicht mit Python.exe sondern mit Python2.exe startest, welches normalerweise keine Shell-Fenster öffnet (also für GUI Programme nett). Pythonw.exe wird auch hergenommen, wenn du .pyw-Skripte startest.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

[quote="Roman"]Und noch was, auch wenns hier nicht ins Forum passt... Das "

Code: Alles auswählen

" zum Einfügen von Code wird bei immer am Ende des Beitrages eingefügt, sodass ich es immer noch kopieren/einfügen muss. Geht euch das auch so?[/quote]
Ich markier immer den Code, klicke dann auf den Python-Button. Das funktioniert bei mir im Firefox, aber ich hab schon gesehen, dass es in anderen Browsern nicht hingehauen hat. Einfach mal ausprobieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Roman
User
Beiträge: 65
Registriert: Dienstag 14. März 2006, 09:10
Wohnort: Berlin

Hallo,
Das mit dem code ist ja auch eigentlich nicht zu schlimm, halt nur n bissel lästig. Aber damit kann man ja fertig werden :D

Danke für die Info über sys.executable...
Bis dann,
Roman

PS: Sorry, dass es so lange gedauert hat mit dem Antworten, aber ich war verreist...
Antworten