PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Python Skript funktioniert nur via Konsole.


Geldmann3
2020-09-18, 00:47:28
Hallo zusammen,

ich habe folgendes Python Skript geschrieben, um automatisch einen Ordner zu kopieren.
import shutil

project_name = input("Enter your project name: ")

print("Creating project folder structure...")
shutil.copytree("SimpleScenery", project_name)
print("Project folder structure created...")
input('Press ENTER to exit')

Wenn ich das Skript in der Konsole ausführe, via:
python .\ProjectCreator.py
Tut es was es soll und kopiert den Ordner wie erwartet.

Doppelklicke ich die Datei hingegen im Explorer, öffnet sich nur kurz die Konsole und fragt mich nach einer Eingabe.
Sobald ich die Eingabe getätigt habe, schließt sich das Fenster jedoch sofort und kopiert auch nicht den Ordner.

Hat jemand eine Idee, warum das Skript nicht via Doppelklick funktioniert?

Danke

Screemer
2020-09-18, 02:02:50
Hört sich so an als wäre die Python runtime nicht ordentlich als globale variable eingebunden.

https://datatofish.com/add-python-to-windows-path/

Mehrere Versionen von Python installiert?

Geldmann3
2020-09-18, 02:14:32
Habe Python mal neu installiert und den Pfad dabei setzen lassen, was nicht geholfen hat.

Könnte es sein, dass ich mich nach einem Doppelklick sozusagen nicht mehr im richtigen Pfad befinde und es deshalb nicht mehr funktioniert?

https://www.forum-3dcenter.org/vbulletin/attachment.php?attachmentid=71501&stc=1&d=1600388050

So:
import shutil

project_name = input('Enter your project name: ')

print('Creating project folder structure...')
shutil.copytree('M\:\\MSFS SDK\\Samples\\SimpleScenery', 'M\:\\MSFS SDK\\Samples\\' + project_name)
print('Project folder structure created...')
input('Press ENTER to exit')

Erstellt das Skript nach einem Doppelklick immerhin immer einen leeren Ordner namens ,,M" im selben Verzeichnis. Was allerdings ja auch nicht das ist, was es tun soll.

Edit:

So:
import shutil

project_name = input('Enter your project name: ')

print('Creating project folder structure...')
shutil.copytree('M:\\MSFS SDK\\Samples\\SimpleScenery', 'M:\\MSFS SDK\\Samples\\' + project_name)
print('Project folder structure created...')
input('Press ENTER to exit')

funktioniert es nun. :smile:
Einen Doppelpunkt muss man in Python wohl nicht escapen.

Screemer
2020-09-18, 02:27:42
Schon Mal mit rechtklick->öffnen mit->python.exe getestet? Sollte das gehen, dann öffnen mit und merken.

Geldmann3
2020-09-18, 02:31:48
Danke!
Problem gelöst, siehe oben. :smile:

Wex
2020-09-18, 04:57:16
Ich empfehl dir PyCharm als IDE, da würde dir angezeigt werden dass du in einem string auch nix escapen musst :)

Geldmann3
2020-09-18, 08:31:13
Danke für den Tipp, das werde ich wirklich ausprobieren.
Hatte das Skript diesmal mit dem Notepad++ geschrieben und hatte mich schon gefragt, womit man sowas ordentlich machen kann.

pest
2020-09-19, 12:13:07
getcwd aus os hätte die direkt verraten das dein Verzeichnis anders ist, als du erwartest

lumines
2020-09-19, 12:58:00
Ich empfehl dir PyCharm als IDE, da würde dir angezeigt werden dass du in einem string auch nix escapen musst :)

Das zeigt dir allerdings nicht PyCharm an, sondern der entsprechende Linter.

Python hat mehrere populäre Linter wie z.B. flake8, pylint oder auch black. Der simpelste ist allerdings pycodestyle, welcher komplett ohne externe Abhängigkeiten auskommt und auch einfach als interaktives Skript benutzt werden kann: https://github.com/PyCQA/pycodestyle

Für sehr einfache Checks nach PEP8 reicht der vollkommen aus und hätte das Problem hier auch sofort gefunden:

$ pycodestyle --show-source geldmann.py
geldmann.py:6:19: W605 invalid escape sequence '\:'
shutil.copytree("M\:\\MSFS SDK\\Samples\\SimpleScenery", "M\:\\MSFS SDK\\Samples\\" + project_name)
^
geldmann.py:6:60: W605 invalid escape sequence '\:'
shutil.copytree("M\:\\MSFS SDK\\Samples\\SimpleScenery", "M\:\\MSFS SDK\\Samples\\" + project_name)
^
geldmann.py:6:80: E501 line too long (99 > 79 characters)
shutil.copytree("M\:\\MSFS SDK\\Samples\\SimpleScenery", "M\:\\MSFS SDK\\Samples\\" + project_name)
^

Im Modul "pathlib" findet man übrigens viele Hilfen für Pfadmanipulationen. Das kann weniger fehleranfällig sein als rohe Strings zu konkatenieren.

Dr.Doom
2020-09-19, 13:28:41
Unter Windows kann man auch einfach /-Symbole statt \ nutzen. Dann escapt sich auch nichts in Strings.

Korfox
2020-09-22, 10:31:17
Unter Windows kann man auch einfach /-Symbole statt \ nutzen. Dann escapt sich auch nichts in Strings.
Ist das Sarkasmus?
https://www.howtogeek.com/181774/why-windows-uses-backslashes-and-everything-else-uses-forward-slashes/

Sweepi
2020-09-23, 16:58:45
Kein Sarkasmus, in Python funktionieren forward slashes in both Windows and Linux.

Korfox
2020-09-23, 17:33:51
Ja, aber wenn es irgendwo Probleme mit Forward-Slashes gibt, dann in Windows. Also ist es unnötig, Windows explizit zu erwähnen.