gpt4 book ai didi

java - 如何在 Jython 中创建符号链接(symbolic link)

转载 作者:行者123 更新时间:2023-11-30 09:44:40 26 4
gpt4 key购买 nike

我正在开发一个使用 Jython 2.2 的项目。

似乎 Jython 2.2 没有 os.symlink() 或任何可以帮助创建符号链接(symbolic link)的东西。

所以我想使用 Java createSymbolicLink()。但是 createSymbolicLink() 需要一个 Java 数据类型“Path”,我不知道如何将其导入 Jython...

有没有人知道如何在 Jython 中创建符号链接(symbolic link)(最好不要使用 shell 命令)?

附言我在 Java 1.6.0 上尝试了“createSymbolicLink()”,但它没有用,因为不知何故,即使我做了“import java.nio.*”之后 Java 也无法识别“Path”……任何想法……?

非常感谢!

jack

最佳答案

Java 6 中不支持符号链接(symbolic link)。使用 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() using jruby posix module .

对于 Java 6 上的 Jython 2.2,您可能需要调用 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();

要批量生成符号链接(symbolic link),您可以与外部 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)

它是从Creating Symbolic Links with Java at Runtime 到Java/C 实现的Jython/Python 的翻译.

关于java - 如何在 Jython 中创建符号链接(symbolic link),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7774598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com