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

Montag 29. Mai 2006, 08:23

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Montag 29. Mai 2006, 16:56

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

Montag 29. Mai 2006, 23:17

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

Dienstag 30. Mai 2006, 10:10

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

Dienstag 30. Mai 2006, 11:41

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

Dienstag 30. Mai 2006, 11:46

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

Dienstag 30. Mai 2006, 11:55

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

Dienstag 30. Mai 2006, 12:16

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

Dienstag 30. Mai 2006, 12:28

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:

Dienstag 30. Mai 2006, 12:48

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

Freitag 2. Juni 2006, 10:23

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:

Freitag 2. Juni 2006, 10:47

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

Freitag 2. Juni 2006, 12:30

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
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Freitag 2. Juni 2006, 12:34

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 Modvoice
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5555
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Oberhofen im Inntal (Tirol)
Kontaktdaten:

Freitag 2. Juni 2006, 13:02

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.
Antworten