Pyinstaller-Ausgabe komplett an ein tkinter-Textfeld schicken
Halli hallo
Ich suche einen Weg, die Pyinstaller-Ausgabe in der Python-Console (unten links in Python; weiß leider nicht, wie das Feld korrekt genannt wird)
in einem tkinter Textfeld meiner eigenen GUI darstellen zu lassen. Hab da schon einiges gesucht/gelesen, aber bisher war nix wirklich passendes dabei.
Ich habe jetzt die Idee, ob ich nicht vielleicht direkt im Pythonmodul 'pyinstaller' (das ich ja importiert habe, um in Python damit zu arbeiten) Änderungen vornehmen kann.
Falls da was schiefgeht , lade ich es einfach neu runter .
Ich habe mir das pyinstaller-Modul mal angeschaut. In dem Ordner gibt es eine Datei ganz unten die heißt: log.py
Die ist denke ich verantwortlich für die pyinstaller-Ausgabe. Kann man die z.B. mit einem return-Befehl dazu bringen, mir die ganzen Ausgaben an mein Textfeld zu schicken? Oder ist das zu "heiß" dort etwas zu verändern?
Würde gern mal eure Meinung hören/lesen?
Ich suche einen Weg, die Pyinstaller-Ausgabe in der Python-Console (unten links in Python; weiß leider nicht, wie das Feld korrekt genannt wird)
in einem tkinter Textfeld meiner eigenen GUI darstellen zu lassen. Hab da schon einiges gesucht/gelesen, aber bisher war nix wirklich passendes dabei.
Ich habe jetzt die Idee, ob ich nicht vielleicht direkt im Pythonmodul 'pyinstaller' (das ich ja importiert habe, um in Python damit zu arbeiten) Änderungen vornehmen kann.
Falls da was schiefgeht , lade ich es einfach neu runter .
Ich habe mir das pyinstaller-Modul mal angeschaut. In dem Ordner gibt es eine Datei ganz unten die heißt: log.py
Die ist denke ich verantwortlich für die pyinstaller-Ausgabe. Kann man die z.B. mit einem return-Befehl dazu bringen, mir die ganzen Ausgaben an mein Textfeld zu schicken? Oder ist das zu "heiß" dort etwas zu verändern?
Würde gern mal eure Meinung hören/lesen?
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@DMD-OL: Was ist denn „unten links in Python“? Python hat kein oben, unten, links, oder rechts, das ist ein Konsolenprogramm, keine GUI-Anwendung. Also welche Software verwendest Du da, und was machst Du damit genau?
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
Ach, PyCharm meinte ich.
Ich wollte doch einfach nur wissen, ob es möglich ist, die ausgabe von pyinstaller in ein tk.Text zu übertragen?
Könnte man das direkt im pyinstaller modul (das man ja runterladen kann) verändern oder ist das nicht ratsam?
Ich wollte doch einfach nur wissen, ob es möglich ist, die ausgabe von pyinstaller in ein tk.Text zu übertragen?
Könnte man das direkt im pyinstaller modul (das man ja runterladen kann) verändern oder ist das nicht ratsam?
- DeaD_EyE
- User
- Beiträge: 1021
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Du könntest von deinem Programm aus den Pyinstaller mit Popen starten und stderr/stdout der PIPE zuweisen.
Dann warten bis der Prozess beendet ist und dann stdout und stderr lesen und die Daten in eine Variable übertragen (z.B. tkinter.StringVar).
Falls die Ausgabe gestreamt werden soll, wird es etwas komplizierter.
Dann warten bis der Prozess beendet ist und dann stdout und stderr lesen und die Daten in eine Variable übertragen (z.B. tkinter.StringVar).
Falls die Ausgabe gestreamt werden soll, wird es etwas komplizierter.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Ich habs jetzt erstmal in einer Datei pyinstaller.py gespeichert.
Ich habe vor, daraus eine executable zu machen, die ich dann für alles verwenden kann.
Damit kann ich erst einmal aus allem eine exe machen, wenn ich die richtigen Pfade angebe.
pyinstaller.py:
Jetzt bin ich dabei, ein eigenes Projekt zu machen mit tkinter layout, buttons für die festlegung der pfade, usw.
Habe in diesem Projekt auch ein kleines ausgabefenster.
In dieses neue Projekt baue ich zur Zeit auch die oben stehende pyinstaller.py datei ein.
Dort würde ich nun gern eine direkte live ausgabe von pyinstaller installieren.
Ist das auch möglich?
Ich hoffe, ich habe es einigermaßen verständlich verdeutlicht bekommen
Ich habe vor, daraus eine executable zu machen, die ich dann für alles verwenden kann.
Damit kann ich erst einmal aus allem eine exe machen, wenn ich die richtigen Pfade angebe.
pyinstaller.py:
Code: Alles auswählen
import os
import shutil
import winshell
import PyInstaller.__main__
from win32com.client import Dispatch
# MAIN SETTINGS
#
SOURCE_PATH = os.getcwd()
# BASE_PATH = os.environ['USERPROFILE']
TARGET_PATH = ['C:', 'Users', 'chris', 'Desktop', 'Hot Run']
#
####
GAME_NAME = TARGET_PATH[-1]
TARGET_GAME_RELEVANTS = ['images', 'sounds', GAME_NAME + '.exe', GAME_NAME + '.spec']
SOURCE_GAME_IRRELEVANTS = ['__pycache__', 'build']
TARGET, TARGET_CNT = str(), 0
for item in TARGET_PATH:
if TARGET_CNT == 0:
TARGET += item
TARGET_CNT += 1
else:
TARGET += '\\'+item
PATH_ICON = os.path.join(TARGET, 'images', 'icon', 'minion.ico')
for item in os.listdir(SOURCE_PATH):
source_path = os.path.join(os.getcwd(), item)
target_path = os.path.join(TARGET, item)
if os.path.isdir(source_path):
if not os.path.isdir(target_path):
shutil.copytree(source_path, target_path, symlinks=False, ignore=None)
else:
shutil.copy2(source_path, target_path)
PyInstaller.__main__.run([
'main.py',
'--onedir',
'--onefile',
'--windowed',
'--noconsole',
'--name=' + GAME_NAME,
'--icon=' + PATH_ICON,
'--distpath=' + TARGET,
'--specpath=' + TARGET
])
Habe in diesem Projekt auch ein kleines ausgabefenster.
In dieses neue Projekt baue ich zur Zeit auch die oben stehende pyinstaller.py datei ein.
Dort würde ich nun gern eine direkte live ausgabe von pyinstaller installieren.
Ist das auch möglich?
Ich hoffe, ich habe es einigermaßen verständlich verdeutlicht bekommen
Deine Konstanten sind keine Konstanten. Das ist sehr verwirrend.
SOURCE_PATH wird inkonsistent verwendet, weil Du an vielen Stellen doch os.getcwd benutzt, was an sich überflüssig ist, weil relative Pfade automatisch vom Arbeitsverzeichnis ausgehen.
Das ist wirklich die komplizierteste Art und weise, wie Du aus der Liste TARGET_PATH einen TARGET-Pfad zusammenbaust. Dafür gibt es doch os.path.join.
os.path ist aber veraltet und sollte durch pathlib.Path ersetzt werden:
SOURCE_PATH wird inkonsistent verwendet, weil Du an vielen Stellen doch os.getcwd benutzt, was an sich überflüssig ist, weil relative Pfade automatisch vom Arbeitsverzeichnis ausgehen.
Das ist wirklich die komplizierteste Art und weise, wie Du aus der Liste TARGET_PATH einen TARGET-Pfad zusammenbaust. Dafür gibt es doch os.path.join.
os.path ist aber veraltet und sollte durch pathlib.Path ersetzt werden:
Code: Alles auswählen
import shutil
import PyInstaller.__main__
from pathlib import Path
# MAIN SETTINGS
SOURCE_PATH = Path.cwd()
# BASE_PATH = os.environ['USERPROFILE']
TARGET_PATH = Path('C:/Users/chris/Desktop/Hot Run')
GAME_NAME = TARGET_PATH.name
TARGET_GAME_RELEVANTS = ['images', 'sounds', GAME_NAME + '.exe', GAME_NAME + '.spec']
SOURCE_GAME_IRRELEVANTS = ['__pycache__', 'build']
PATH_ICON = TARGET_PATH / 'images' / 'icon' / 'minion.ico'
def main():
for source_path in SOURCE_PATH.iterdir():
if source_path.name in SOURCE_GAME_IRRELEVANTS:
continue
target_path = TARGET_PATH / source_path.name
if source_path.isdir():
if not target_path.isdir():
shutil.copytree(source_path, target_path, symlinks=False, ignore=None)
else:
shutil.copy2(source_path, target_path)
PyInstaller.__main__.run([
'main.py',
'--onedir',
'--onefile',
'--windowed',
'--noconsole',
f'--name={GAME_NAME}',
f'--icon={PATH_ICON}',
f'--distpath={TARGET_PATH}',
f'--specpath={TARGET_PATH}',
])
if __name__ == "__main__":
main()
Habe mich jetzt mit dem Starten von Pyinstaller via subprocess beschäftigt.
Später füge ich dann noch ein tk.Text für die ausgabe von pyinstaller hinzu.
Zunächst wollte ich erst einmal pyinstaller mit subprocess laufen lassen und die ausgabe an stderr/stdout zuweisen.
Bin aber neuling, bei der benutzung von subprocess.
In meinem Code:
erhalte ich die Ausnahme:
Ich weiß nicht genau, wodurch der Fehler verursacht wird.
@ DeaD_EyE: Pyinstaller mit Popen starten und stderr/stdout der PIPE zuweisen und ja so auch noch nicht umgesetzt.
Ohne subprocess, sondern nur mit
läuft der Code einwandfrei.
Später füge ich dann noch ein tk.Text für die ausgabe von pyinstaller hinzu.
Zunächst wollte ich erst einmal pyinstaller mit subprocess laufen lassen und die ausgabe an stderr/stdout zuweisen.
Bin aber neuling, bei der benutzung von subprocess.
In meinem Code:
Code: Alles auswählen
import os
import shutil
import subprocess
import PyInstaller.__main__
SRC_FILE_PATH = "C:/Users/chris/Documents/PyCharm/Hot Run/main.py"
SRC_SPLIT_PATH = SRC_FILE_PATH.split('/')
SRC_BASE_NAME = SRC_SPLIT_PATH.pop(-1)
SRC_PATH = '/'.join(SRC_SPLIT_PATH)
TRG_FOLDER_PATH = "C:/Users/chris/Desktop/HOT RUNNER"
TRG_SPLIT_PATH = TRG_FOLDER_PATH.split('/')
TRG_BASE_NAME = TRG_SPLIT_PATH.pop(-1)
TRG_PATH = '/'.join(TRG_SPLIT_PATH)
SRC_ICN_FILE = "C:/Users/chris/Documents/PyCharm/Hot Run/images/icon/minion.ico"
SRC_IMG_FOLDER = "C:/Users/chris/Documents/PyCharm/Hot Run/images"
SRC_SND_FOLDER = "C:/Users/chris/Documents/PyCharm/Hot Run/sounds"
def copy_additives(src_path, trg_path):
if os.path.isdir(src_path):
if not os.path.isdir(trg_path):
shutil.copytree(src_path, trg_path, symlinks=False, ignore=None)
else:
shutil.copy2(src_path, trg_path)
for item in os.listdir(SRC_PATH):
SOURCE_PATH = os.path.join(SRC_PATH, item).replace('\\', '/')
if SRC_IMG_FOLDER == SOURCE_PATH:
TRG_IMG_FOLDER = os.path.join(TRG_PATH, TRG_BASE_NAME, item).replace('\\', '/')
copy_additives(SRC_IMG_FOLDER, TRG_IMG_FOLDER)
elif SRC_SND_FOLDER == SOURCE_PATH:
TRG_SND_FOLDER = os.path.join(TRG_PATH, TRG_BASE_NAME, item).replace('\\', '/')
copy_additives(SRC_SND_FOLDER, TRG_SND_FOLDER)
os.chdir(SRC_PATH)
subprocess.call(
PyInstaller.__main__.run([
SRC_BASE_NAME,
'--onedir',
'--onefile',
'--windowed',
'--noconsole',
'--name=' + TRG_BASE_NAME,
'--icon=' + SRC_ICN_FILE,
'--distpath=' + TRG_FOLDER_PATH,
'--specpath=' + TRG_FOLDER_PATH
]))
Code: Alles auswählen
[...]
7607 INFO: Building EXE from EXE-00.toc completed successfully.
Traceback (most recent call last):
File "C:\Users\chris\Documents\PyCharm\Create EXE-File\test.py", line 41, in <module>
subprocess.call(PyInstaller.__main__.run([
File "C:\Program Files\Python39\lib\subprocess.py", line 349, in call
with Popen(*popenargs, **kwargs) as p:
File "C:\Program Files\Python39\lib\subprocess.py", line 947, in __init__
self._execute_child(args, executable, preexec_fn, close_fds,
File "C:\Program Files\Python39\lib\subprocess.py", line 1356, in _execute_child
args = list2cmdline(args)
File "C:\Program Files\Python39\lib\subprocess.py", line 561, in list2cmdline
for arg in map(os.fsdecode, seq):
TypeError: 'NoneType' object is not iterable
Process finished with exit code 1
@ DeaD_EyE: Pyinstaller mit Popen starten und stderr/stdout der PIPE zuweisen und ja so auch noch nicht umgesetzt.
Ohne subprocess, sondern nur mit
Code: Alles auswählen
PyInstaller.__main__.run([
SRC_BASE_NAME,
'--onedir',
'--onefile',
'--windowed',
'--noconsole',
'--name=' + TRG_BASE_NAME,
'--icon=' + SRC_ICN_FILE,
'--distpath=' + TRG_FOLDER_PATH,
'--specpath=' + TRG_FOLDER_PATH
])
Konstanten werden komplett gross geschrieben, normaler Variablen dagegen komplett klein.
Das was Du da mit String-Operationen machst, macht man nicht, sondern nutzt pathlib.Path.
Aber das sag ich Dir ja jetzt schon zum Dritten mal, da scheint es eine Lernresistenz zu geben.
Das was Du da mit String-Operationen machst, macht man nicht, sondern nutzt pathlib.Path.
Aber das sag ich Dir ja jetzt schon zum Dritten mal, da scheint es eine Lernresistenz zu geben.
ja. warum muß ich den pathlib.Path benutzen? was daran ist denn besser?
mir gefällt os.path sehr gut. pathlib.Path ist mir zu konfus zu benutzen, bei os.path ist die syntax sofort klar und einfacher.
hört sich ja sehr zwingend an von dir.
außerdem schreibe ich dir auch nicht zum ersten mal, daß das ein ausschnitt ist, den ich kurz vorbereite. ich möchte nicht
tagelang den mist vorbereiten, hier posten und dann keine nützliche hilfe bekommen.
mir gefällt os.path sehr gut. pathlib.Path ist mir zu konfus zu benutzen, bei os.path ist die syntax sofort klar und einfacher.
hört sich ja sehr zwingend an von dir.
außerdem schreibe ich dir auch nicht zum ersten mal, daß das ein ausschnitt ist, den ich kurz vorbereite. ich möchte nicht
tagelang den mist vorbereiten, hier posten und dann keine nützliche hilfe bekommen.
Du benutzt nicht einmal os.path. uns wenn du keine nützliche Hilfe bekommst, liegt das vielleicht daran, dass sich niemand durch deinen kryptischen Code durcharbeiten will. Zudem findet du dir doch schon selbst die Antwort: subprocess.call weglassen.
Wie subprocess.call weglassen?
Dann habe ich die pyinstaller-ausgabe doch wieder im pycharm-Fenster. Das möchte ich doch nicht.
Ich versuche mit subprocess eine anbindung zu pyinstaller (zum Output von pyinstaller) zu bekommen, damit ich die Ausgabe
des Pyinstaller-Moduls auslesen und in meinem eigenen fenster (tk.Text) ausgegen kann.
Im Grund das was -DeaD_EyE- schon oben beschrieben hat, versuche ich jetzt umzusetzen.
Habe im netz das hier gefunden erst mal:
und versuche nun das hier
mit subprocess.Popen zu starten...
Dann habe ich die pyinstaller-ausgabe doch wieder im pycharm-Fenster. Das möchte ich doch nicht.
Ich versuche mit subprocess eine anbindung zu pyinstaller (zum Output von pyinstaller) zu bekommen, damit ich die Ausgabe
des Pyinstaller-Moduls auslesen und in meinem eigenen fenster (tk.Text) ausgegen kann.
Im Grund das was -DeaD_EyE- schon oben beschrieben hat, versuche ich jetzt umzusetzen.
Habe im netz das hier gefunden erst mal:
Code: Alles auswählen
cmd = 'C:/Program Files/Python39/Scripts/pyinstaller.exe'.split('/')
# cmd ist der Pfad der PyInstaller.__main__-Datei (ohne split natürlich)
# args ist eine liste mit argumenten. Nur welche? args = cmd?
process = subprocess.Popen(args,
bufsize=0,
executable=True,
stdin=subprocess.PIPE,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
preexec_fn=None, close_fds=False,
shell=True,
cwd=None, env=None,
universal_newlines=False,
startupinfo=None,
creationflags=0)
stdout, stderr = process.communicate()
Code: Alles auswählen
PyInstaller.__main__.run([
SRC_BASE_NAME,
'--onedir',
'--onefile',
'--windowed',
'--noconsole',
'--name=' + TRG_BASE_NAME,
'--icon=' + SRC_ICN_FILE,
'--distpath=' + TRG_FOLDER_PATH,
'--specpath=' + TRG_FOLDER_PATH
])
Habe mir jetzt einige Tutorials zu subprocess.Popen angeschaut.
Weiß aber leider noch immer nicht so richtig, wie ich den Pyinstaller mit subprocess "verpacken" soll.
Das gibt mir die Ausgabe:
Es fehlen ja jetzt noch die Argumente, die pyinstaller braucht (pyinstaller_args).
Wie übergibt man die denn jetzt an subprocess.Popen?
Weiß aber leider noch immer nicht so richtig, wie ich den Pyinstaller mit subprocess "verpacken" soll.
Code: Alles auswählen
os.chdir('C:/Users/chris/Documents/PyCharm/Hot Run') # Diese Datei soll mit pyinstaller in eine .exe umgewandelt werden.
# Fehlerfreie funktionierendes kleines Spiel, das mit pyinstaller
# 'successful' umgewandelt wird. Nur das was pyinstaller dazu ausgibt,
# möchte ich gern in ein textfeld in tkinter schreiben lassen.
process = subprocess.Popen(['C:/Program Files/Python39/Scripts/pyinstaller.exe',
# SRC_BASE_NAME,
# '--onedir',
# '--onefile',
# '--windowed',
# '--noconsole',
# '--name=' + TRG_BASE_NAME,
# '--icon=' + SRC_ICN_FILE,
# '--distpath=' + TRG_FOLDER_PATH,
# '--specpath=' + TRG_FOLDER_PATH
],
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
stdout, stderr = process.communicate()
print(stdout, stderr) # Hier ist die Augabe von pyinstaller, die ich in ein tk.Text-Feld überführen möchte
process.kill()
Code: Alles auswählen
usage: pyinstaller [-h] [-v] [-D] [-F] [--specpath DIR] [-n NAME]
[--add-data <SRC;DEST or SRC:DEST>]
[--add-binary <SRC;DEST or SRC:DEST>] [-p DIR]
[--hidden-import MODULENAME]
[--additional-hooks-dir HOOKSPATH]
[--runtime-hook RUNTIME_HOOKS] [--exclude-module EXCLUDES]
[--key KEY] [-d {all,imports,bootloader,noarchive}] [-s]
[--noupx] [--upx-exclude FILE] [-c] [-w]
[-i <FILE.ico or FILE.exe,ID or FILE.icns or "NONE">]
[--version-file FILE] [-m <FILE or XML>] [-r RESOURCE]
[--uac-admin] [--uac-uiaccess] [--win-private-assemblies]
[--win-no-prefer-redirects]
[--osx-bundle-identifier BUNDLE_IDENTIFIER]
[--runtime-tmpdir PATH] [--bootloader-ignore-signals]
[--distpath DIR] [--workpath WORKPATH] [-y]
[--upx-dir UPX_DIR] [-a] [--clean] [--log-level LEVEL]
scriptname [scriptname ...]
pyinstaller: error: the following arguments are required: scriptname
Process finished with exit code 0
Wie übergibt man die denn jetzt an subprocess.Popen?
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@DMD-OL: `os.chdir()` hat da nichts zu suchen. Wenn der externe Prozess ein anderes Arbeitsverzeichnis als der aktuell laufende haben soll, dann hat `Popen()` ein Argument dafür.
Das ``shell=True`` macht keinen Sinn. Warum muss zwischen Deinem Prozess und dem PyInstaller noch ein zusätzlicher Shell-Prozess laufen und einfach nur die Daten durchreichen?
Für den gezeigten Aufruf braucht man nicht auf `Popen()` und `communicate()` aufteilen, das kann man auch mit `subprocess.run()` machen.
Das ``shell=True`` macht keinen Sinn. Warum muss zwischen Deinem Prozess und dem PyInstaller noch ein zusätzlicher Shell-Prozess laufen und einfach nur die Daten durchreichen?
Für den gezeigten Aufruf braucht man nicht auf `Popen()` und `communicate()` aufteilen, das kann man auch mit `subprocess.run()` machen.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
- DeaD_EyE
- User
- Beiträge: 1021
- Registriert: Sonntag 19. September 2010, 13:45
- Wohnort: Hagen
- Kontaktdaten:
Wenn man sein Programm unter Windows, Linux und Mac ohne Anpassungen Pfade verwenden möchte, ist es mit pathlib viel einfacher.
Code: Alles auswählen
from pathlib import Path
DESKTOP = Path.home() / "Desktop"
Auf meinem Linux-Server mit anderem Nutzer: PosixPath('/home/public/Desktop')
Einen Mac habe ich leider nicht zu demonstrieren.
Das geht natürlich auch mit os.path, aber es ist umständlicher.
Code: Alles auswählen
import os
DESKTOP = os.path.join(os.path.expanduser("~"), "Desktop")
Linux:
Code: Alles auswählen
In [18]: pathlib.PosixPath._flavour.gethomedir??
Signature: pathlib.PosixPath._flavour.gethomedir(username)
Docstring: <no docstring>
Source:
def gethomedir(self, username):
if not username:
try:
return os.environ['HOME']
except KeyError:
import pwd
return pwd.getpwuid(os.getuid()).pw_dir
else:
import pwd
try:
return pwd.getpwnam(username).pw_dir
except KeyError:
raise RuntimeError("Can't determine home directory "
"for %r" % username)
File: ~/.pyenv/versions/3.9.1/lib/python3.9/pathlib.py
Type: method
Code: Alles auswählen
Signature: pathlib.WindowsPath._flavour.gethomedir(username)
Docstring: <no docstring>
Source:
def gethomedir(self, username):
if 'USERPROFILE' in os.environ:
userhome = os.environ['USERPROFILE']
elif 'HOMEPATH' in os.environ:
try:
drv = os.environ['HOMEDRIVE']
except KeyError:
drv = ''
userhome = drv + os.environ['HOMEPATH']
else:
raise RuntimeError("Can't determine home directory")
if username:
# Try to guess user home directory. By default all users
# directories are located in the same place and are named by
# corresponding usernames. If current user home directory points
# to nonstandard place, this guess is likely wrong.
if os.environ['USERNAME'] != username:
drv, root, parts = self.parse_parts((userhome,))
if parts[-1] != os.environ['USERNAME']:
raise RuntimeError("Can't determine home directory "
"for %r" % username)
parts[-1] = username
if drv or root:
userhome = drv + root + self.join(parts[1:])
else:
userhome = self.join(parts)
return userhome
File: ~/.pyenv/versions/3.9.1/lib/python3.9/pathlib.py
Type: method
Auch die unterschiedlichen Implementierungen sind sehr deutlich zu erkennen.
PS: Pfade als Strings mit + zu verknüpfen ist ganz falsch. Da muss man dann immer an den Pfadseparator (/ oder \) denken.
sourceserver.info - sourceserver.info/wiki/ - ausgestorbener Support für HL2-Server
Vielen Dank.
sonst sind die beiden dateien im alten original ordner. ich wollte da einfach alles zusammen in einem ordner haben.
den rest versuche ich umzusetzen... danke
@__blackjack__: os.chdir() habe ich da nicht wegen subprocess.Popen, sondern damit pyinstaller die build und dist folder im dem ordner erstellt, den ich auf den desktop kopiert habe.@DMD-OL: `os.chdir()` hat da nichts zu suchen. Wenn der externe Prozess ein anderes Arbeitsverzeichnis als der aktuell laufende haben soll, dann hat `Popen()` ein Argument dafür.
sonst sind die beiden dateien im alten original ordner. ich wollte da einfach alles zusammen in einem ordner haben.
den rest versuche ich umzusetzen... danke
- __blackjack__
- User
- Beiträge: 13111
- Registriert: Samstag 2. Juni 2018, 10:21
- Wohnort: 127.0.0.1
- Kontaktdaten:
@DMD-OL: Das ändert nichts daran das `os.chdir()` da nicht stehen sollte. Das ändert nicht nur das aktuelle Arbeitsverzeichnis von PyInstaller sondern auch von Deinem Programm. Wenn das externe Programm ein anderes Arbeitsverzeichnis haben soll, dann regelt man das über das entsprechende `Popen`-Argument. Dafür ist das ja da.
„All religions are the same: religion is basically guilt, with different holidays.” — Cathy Ladman
verstehe ich ja. für subprocess ist das vollkommen unnötig. aber für pyinstaller doch nicht. dafür hab ich das da drin.
aber ich kanns auch rausnehmen. nur das programm, in dem ich nur den pyinstaller benutze läuft wunderbar.
ich kann mir einen source file wählen (also eine py-Datei aussuchen) und einen target verzeichnis auswählen und es
wird eine executable am zielort mit icon auf dem desktop erstellt. funktioniert wunderbar. brauche aber glaub ich
einen ansatz, wie ich jetzt den pyinstaller in subprocess starten kann, damit ich die ausgabe ins text-feld überführen kann.
sonst bekomm i das wohl eher nicht hin.
kann mir da jmd einen ansatz zeigen?
aber ich kanns auch rausnehmen. nur das programm, in dem ich nur den pyinstaller benutze läuft wunderbar.
ich kann mir einen source file wählen (also eine py-Datei aussuchen) und einen target verzeichnis auswählen und es
wird eine executable am zielort mit icon auf dem desktop erstellt. funktioniert wunderbar. brauche aber glaub ich
einen ansatz, wie ich jetzt den pyinstaller in subprocess starten kann, damit ich die ausgabe ins text-feld überführen kann.
sonst bekomm i das wohl eher nicht hin.
kann mir da jmd einen ansatz zeigen?
Da Du es nicht anders verstehst.
FALSCH:
Richtig:
FALSCH:
Code: Alles auswählen
os.chdir('C:/Users/chris/Documents/PyCharm/Hot Run')
process = subprocess.Popen([...],
shell=True,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)
Code: Alles auswählen
process = subprocess.Popen([...],
cwd='C:/Users/chris/Documents/PyCharm/Hot Run',
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
universal_newlines=True)