subprocess.Popen( setup.py entry_point )
Verfasst: Freitag 21. August 2015, 16:58
Ich will DragonPy einfacher benutzbar machen. Deswegen habe ich eine "Starter GUI" gebaut.
Sieht aktuell so aus:

Hübsch ist anders, aber egal
Die GUI wird über die normal cli gestartet (wenn man keinen Parameter angibt)... setup.py hat das:
Wenn ich also im aktivierten virtualenv nur "DragonPy" starte, kommt diese GUI.
Das eigentliche starten einer Emulation passiert dann über subprocess.Popen()
und hier das eigentliche Problem: Wenn ich einfach subprocess.Popen(["DragonPy",...]) mache, wird die Datei "DragonPy" nicht in jedem Fall gefunden
Also hab ich mir gesagt, ich such einfach in sys.path nach der Datei, um den kompletten Pfad zu haben. Klappt meistens auch, aber es gibt Situationen, da klappt das nicht
Die automatisch generierte Datei (siehe auch [1]) sieht z.B. so aus:
Dann hab ich mal folgendes gemacht:
Ausgabe:
Damit kann ich aber nicht direkt was anfangen, wenn ich subprocess.Popen() nutzten will. Das will ich, damit man mal eben mehrere Instanzen in separaten Prozessen starten will... Wobei ich dazu theoretisch auch das multiprocessing modul nutzten könne und direkt <function main at 0xb5a9c92c> nutzten... Aber ich glaube das ist zu kompliziert, oder?
Wobei es schöner wäre, wenn die Ausgaben von mehreren Instanzen nicht in der selben Console landen würde... Aber das ist mir jetzt erstmal egal...
Noch jemand eine Idee?!?
[1] https://pythonhosted.org/setuptools/set ... t-creation
Sieht aktuell so aus:

Hübsch ist anders, aber egal
Die GUI wird über die normal cli gestartet (wenn man keinen Parameter angibt)... setup.py hat das:
Code: Alles auswählen
setup(
entry_points={
"console_scripts": ["DragonPy = dragonpy.core.cli:main"],
},
)Das eigentliche starten einer Emulation passiert dann über subprocess.Popen()
und hier das eigentliche Problem: Wenn ich einfach subprocess.Popen(["DragonPy",...]) mache, wird die Datei "DragonPy" nicht in jedem Fall gefunden
Also hab ich mir gesagt, ich such einfach in sys.path nach der Datei, um den kompletten Pfad zu haben. Klappt meistens auch, aber es gibt Situationen, da klappt das nicht
Die automatisch generierte Datei (siehe auch [1]) sieht z.B. so aus:
Code: Alles auswählen
#!/home/jens/DragonPy_env/bin/python
# EASY-INSTALL-ENTRY-SCRIPT: 'DragonPyEmulator==0.5.2','console_scripts','DragonPy'
__requires__ = 'DragonPyEmulator==0.5.2'
import sys
from pkg_resources import load_entry_point
if __name__ == '__main__':
sys.exit(
load_entry_point('DragonPyEmulator==0.5.2', 'console_scripts', 'DragonPy')()
)
Code: Alles auswählen
DISTRIBUTION_NAME="DragonPyEmulator"
DIST_GROUP = "console_scripts"
ENTRY_POINT = "DragonPy"
distribution = get_distribution(DISTRIBUTION_NAME)
print(distribution)
entry_map = distribution.get_entry_map()
# Return the entry point map for `group`, or the full entry map
print("entry_map:", entry_map)
entry_info = distribution.get_entry_info(DIST_GROUP, ENTRY_POINT)
# Return the EntryPoint object for `group`+`name`, or ``None``
print("entry_info:", entry_info)
entry_point = distribution.load_entry_point(DIST_GROUP, ENTRY_POINT)
# Return the `name` entry point of `group` or raise ImportError
print("entry_point:", entry_point)Code: Alles auswählen
DragonPyEmulator 0.5.2
entry_map: {'console_scripts': {'DragonPy': EntryPoint.parse('DragonPy = dragonpy.core.cli:main')}}
entry_info: DragonPy = dragonpy.core.cli:main
entry_point: <function main at 0xb5a9c92c>Wobei es schöner wäre, wenn die Ausgaben von mehreren Instanzen nicht in der selben Console landen würde... Aber das ist mir jetzt erstmal egal...
Noch jemand eine Idee?!?
[1] https://pythonhosted.org/setuptools/set ... t-creation