В Java 6 нет поддержки символических ссылок. С Java 7 вы можете (не проверено):
from java.nio.file import FileSystems # requires Java 7 (July 28, 2011)
def mksymlink(target, path):
"""Make a symlink from target to path."""
fs = FileSystems.getDefault()
target, path = [fs.getPath('', [name]) for name in [target, path]]
path.createSymbolicLink(target)
В Jython 2.5 реализовано os.symlink()
с использованием модуля jruby posix .
В Jython 2.2 на Java 6 вам может понадобиться позвонить ln
:
import os
from java.lang import Runtime
def mksymlink(target, path):
path = os.path.abspath(path)
process = Runtime.getRuntime().exec(["ln", "-s", target, path]);
process.waitFor();
process.destroy();
Для массового производства символических ссылок вы можете общаться с внешним процессом Python:
import os
from java.lang import Runtime
from java.io import PrintWriter
class Symlinker:
def __init__(self, path):
self.process = Runtime.getRuntime().exec(path)
self.out = PrintWriter(self.process.getOutputStream())
def __call__(self, target, path):
self.out.write("%s\0%s\n" % (target, path))
self.out.flush()
def terminate(self):
self.out.close()
self.process.waitFor()
self.process.destroy()
symlinker = Symlinker(["python", "symlinker.py"])
def mksymlink(target, path):
symlinker(*map(os.path.abspath, [target, path]))
Где symlinker.py
:
#!/usr/bin/env python
import os, sys
for line in iter(sys.stdin.readline, ''):
target, path = line.rstrip('\n').split('\0')
os.symlink(target, path)
Это перевод Jython / Python реализации Java / C с Создание символических ссылок с помощью Java во время выполнения .