Warum os.link() nicht auch für 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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Es doch mit NTFS schon möglich Hardlinks zu erstellen.
Ich hab dafür z.B. http://schinagl.priv.at/nt/hardlinkshel ... llext.html installiert, mit den man das bequem machen kann.

Wäre schön, wenn man das mit Python machen könnte...

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
lunar

jens hat geschrieben:Es doch mit NTFS schon möglich Hardlinks zu erstellen.
Ich hab dafür z.B. http://schinagl.priv.at/nt/hardlinkshel ... llext.html installiert, mit den man das bequem machen kann.

Wäre schön, wenn man das mit Python machen könnte...
Wofür denn das? 80-90% aller Windows-Nutzer wissen ja noch nicht mal was ein Hardlink ist...

Was mich allerdings an dem geposteten Link wundert, ist die Tatsache, dass Symlinks nur unter Vista unterstützt werden. Eigentlich sollte das auch schon unter XP gehen...
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

lunar hat geschrieben:Wofür denn das? 80-90% aller Windows-Nutzer wissen ja noch nicht mal was ein Hardlink ist...
Mit der Bekanntschaft von Symlinks sieht es aber auch nicht besser aus. .lnk Dateien sind eben nur ein schlechter Ersatz.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
DaSch
User
Beiträge: 72
Registriert: Mittwoch 28. März 2007, 20:04
Kontaktdaten:

ist das überhaupt im Filesystem implementiert oder ist dass nur eine erweiterung die ohne spezielle Treiber nicht funktioniert. Weill wenn es kein Bestandteil des Filesystem ist dann sollte man das lieber lassen.
BlackJack

NTFS kann wohl echte Hardlinks.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Das NTFS in Windows 2000 unterstützt auch Junctions (das Tool wurde von den Sysinternals-Leuten geschrieben), welche wie Symlinks auf Ordner funktionieren.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Juhuu. Junctions. The fastes way to make your data garbage on Windows XP and greater. :roll:
TUFKAB – the user formerly known as blackbird
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Wikipedia http://de.wikipedia.org/wiki/NTFS (Abschnitt NTFS 3.X):
...
# Hardlinks: Daten können von bis zu 1023 Dateinamen referenziert werden (eine Datei, viele Namen).
# NTFS-Junction-Points bzw. symbolische Links, um Verzeichnisse, Partitionen oder Laufwerke in andere Verzeichnisse einzuhängen (siehe Symlinks bei Unix/Linux). NTFS-Junction-Points können jedoch nur auf lokale Ressourcen verweisen, nicht auf Freigaben anderer Rechner – das ist nur mit DFS-Junction-Points möglich.
...
Windows NT 4.0 kann NTFS 3.X-Partitionen erst ab Service Pack 4 lesen.---
...
Demnach gehen Hardlinks ab NT v4 + SP4...

Noch ein andere Stelle: http://de.wikipedia.org/wiki/Symbolischer_Link#Windows
Eine weitere Möglichkeit in Windows sind Abzweigungspunkte („junction points“), welche jedoch das Dateisystem NTFS 5 bzw. ab Version 3.0 (Windows 2000, Windows XP, Windows 2003 und Windows Vista) voraussetzten. Diese sind den symbolischen Links auf Verzeichnisse sehr viel ähnlicher als Verknüpfungen.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

...I'm singing the song of junctions and data garbage... *whistle*
TUFKAB – the user formerly known as blackbird
Master_of_Mechanic
User
Beiträge: 5
Registriert: Samstag 12. Mai 2007, 18:35

Die c't hat auch schon mal Spielerein mit HardLinks für winXP gemacht.

"Fix verknüpft Hard-Link-Backups für Windows" http://www.heise.de/ct/ftp/06/09/126/

Allerdings fände ich es "besser" mit Mitteln in Python zu machen ohne extern ein Programm auszuführen. Und am besten wäre es wenn es Platfomunabhängig wäre.[/url]
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Master_of_Mechanic hat geschrieben:Die c't hat auch schon mal Spielerein mit HardLinks für winXP gemacht.
``rsync``? Das ist doch wohl mal was ganz anderes... :?:
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ich kann das nun für simpleDMS brauchen und mache mich wieder auf die Suche... Kennt jemand spontan Links zum Thema?

EDIT: "Add os.link() and os.symlink() support for Windows": http://bugs.python.org/issue1578269 (Erstellt 2006)
http://timgolden.me.uk/pywin32-docs/win ... _meth.html
http://timgolden.me.uk/pywin32-docs/win ... _meth.html

EDIT2: Na, toll:

Code: Alles auswählen

import sys
import platform
import win32file

print sys.version
print platform.platform()

win32file.CreateHardLink # geht
win32file.CreateSymbolicLink # AttributeError: 'module' object has no attribute 'CreateSymbolicLink'
Ausgabe:

Code: Alles auswählen

2.5.2 (r252:60911, Mar 27 2008, 17:57:18) [MSC v.1310 32 bit (Intel)]
Windows-Vista-6.0.6001-SP1
Traceback (most recent call last):
  File "test.py", line 12, in <module>
    win32file.CreateSymbolicLink
AttributeError: 'module' object has no attribute 'CreateSymbolicLink'
Warum das?
So: https://sourceforge.net/tracker/index.p ... tid=551954

EDIT3: Mit 2.6.1 geht's. bzw. CreateSymbolicLink gibt es generell nur unter Vista.

Dumm ist, um Symbolische Links zu erstellen, braucht man Admin rechte. Diese kann man aber anscheinend nicht mehr im laufenden Programm erhalten, siehe: http://mail.python.org/pipermail/python ... 07600.html

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jens hat geschrieben:Dumm ist, um Symbolische Links zu erstellen, braucht man Admin rechte.
Irgendwie stimmt da was nicht. Denn mit dem Tool "Link Shell Extension" http://schinagl.priv.at/nt/hardlinkshel ... llext.html kann man ohne Admin rechte alles machen. Kein UAC unter Vista. Wie geht das?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Laut dieser Seite braucht man dazu das Priviledge "Create Symbolic Link". Vielleicht macht ja die Shell-Extension irgendwelchen UAC-Voodoo?

Hast du ``mklink`` ausprobiert? Was passiert da?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Das geht auch nur als Admin.

Da wir schon mal bei den Rechten sind. Ich möchte auch was unter win32con.HKEY_CLASSES_ROOT eintragen. Dafür braucht man ebenfalls Admin Rechte.

Ich hab mal irgendwo gesehen, das man bei fehlenden Rechten den Python Interpreter wieder per "runas" aufruft, um so zum Admin zu werden.

Ich verstehe allerdings nicht wie das gehen soll. Ich meine wie soll der runas Aufruf aussehen? Ich weiß doch nicht den namen vom Administrator. Außerdem soll es ja als aktuelle User laufen, der aber dann sich als Admin ausweißt. Letztlich soll also der vista UAC Dialog erscheinen, zum freischalten.

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

jens hat geschrieben:Da wir schon mal bei den Rechten sind. Ich möchte auch was unter win32con.HKEY_CLASSES_ROOT eintragen. Dafür braucht man ebenfalls Admin Rechte.
Zumindest dafür habe ich eine Lösung. Statt unter HKEY_CLASSES_ROOT, trage ich nun meine Dinge unter HKEY_CURRENT_USER\Software\Classes ein ;) Da braucht man keine Admin rechte. Dafür sind die Einträge auch nur für den Aktuellen User gültig. Das Ein-/Austragen mache ich so:
http://code.google.com/p/simpledms/sour ... svn20&r=20

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

btw. eine Lösung für das erzeugen von Hard-/Symbolischen-Links suche ich immer noch :(

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Was geht, sind Datei hardlinks, z.B.: win32file.CreateHardLink("test2.txt", "test.txt")

Bei einem win32file.CreateSymbolicLink("test", "test2") bekomme ich aber Fehler wie: Dem Client fehlt ein erforderliches Recht.

Ein kleines Test Programm hab ich hier gemacht: http://paste.pocoo.org/show/98615/


CreateSymbolicLink gibt's eh erst ab Vista. Denn erst bei NTFS von Vista gibt es Symbolische Links.
Als Alternative könnte man unter 2000 und XP halt die sog. "NTFS junction point" erzeugen. Hab in der win32api aber dazu nichts gefunden, habe aber diese .NET Funktion gesehen, weiß aber nicht wie ich da von CPython ran komme, siehe andern Thread: http://www.python-forum.de/topic-17343.html

EDIT: Eine Möglichkeit gibt es wohl doch: http://www.velocityreviews.com/forums/s ... ostcount=5
Stichwort win32file.DeviceIoControl, winioctlcon.FSCTL_SET_REPARSE_POINT und REPARSE_GUID_DATA_BUFFER
Sas ist echt abgefahren und sehr low-level, siehe: http://mail.python.org/pipermail/python ... 80295.html

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Junction Points gehen aber nur für Verzeichnisse, oder?
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ja, ich denke schon. Würde mir dennoch helfen.
Nun baue ich erstmal eine Variante mit subprocess :(

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten