В официальной документации Python по функции os.symlink() отсутствует важная информация

Это заголовок раздела о функции os.symlink() в официальной документации Python 3.12, версии Python, которую я использую:

os.symlink(src, dst, target_is_directory=False, *, dir_fd=None)

Создайте символическую ссылку, указывающую на источник с именем dst.

В Windows символическая ссылка представляет либо файл, либо каталог, и не трансформируется в цель динамически. Если цель присутствует, тип символической ссылки будет создан соответствующим образом. В противном случае символическая ссылка будет создана как каталог, если target_is_directory имеет значение True или символическую ссылку на файл (по умолчанию) в противном случае. На платформах, отличных от Windows, target_is_directory игнорируется.

Описание четвертого параметра (*) и пятого параметра (dir_fd) не приводится. Я предполагаю, что пятый параметр означает каталог, в котором следует разместить символическую ссылку, но я не уверен, что прав. Я совершенно пропустил четвертый параметр, когда писал свой код, и теперь, когда я его вижу, я понятия не имею, что туда поместить, а документация мне не подсказывает.

Это был мой код, я знаю, что он неправильный, но не знаю, что поставить четвертым параметром:

os.symlink(absold, newfn, False, dir)

Однако сообщение об ошибке, которое я получил, не было особенно полезным, учитывая, что в документе упоминаются 4, если не 5 параметров.

TypeError: symlink() takes at most 3 positional arguments (4 given)

Как мне это закодировать, чтобы символическая ссылка создавалась в том каталоге, в котором я хочу, чтобы она была? Я не запускаю из каталога, где находятся эти файлы.

Официальные документы неверны?

Четвертый параметр является просто заполнителем и не считается параметром, который означает, что все, что следует за ним, должно быть только ключевым словом. документы. Если dir_fd не имеет значения None, он используется для разрешения относительных путей вместо текущего рабочего каталога.

Timsib Adnap 22.06.2024 23:18

Хотя вопрос, который я связал как дубликат, касается, в частности, другого вызова, общий вопрос: «Что такое dir_fd / что он делает?» часть не зависит от вызова — она имеет одно и то же значение во всех системных вызовах, которые ее поддерживают, и, следовательно, во всех оболочках более высокого уровня для этих вызовов.

Charles Duffy 23.06.2024 01:18
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
0
3
56
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

* в определении функции в Python разделяет аргументы позиции и аргументы, содержащие только ключевые слова. Ты не можешь сделать os.symlink(a, b, c, d), ты должен os.symlink(a, b, c, dir_fd=d). Это обычный синтаксис Python. См. https://docs.python.org/3/reference/compound_stmts.html#function-definitions:

Параметры после «*» или «*identifier» являются параметрами только для ключевых слов и могут передаваться только в качестве аргументов ключевого слова. Параметры перед «/» являются только позиционными параметрами и могут передаваться только в виде позиционных аргументов.

Что касается dir_fd, то это файловый дескриптор, ссылающийся на каталог, способ ссылки на каталоги по номеру в Linux. См. https://docs.python.org/3.12/library/os.html#dir-fd .

Спасибо. Я понял это сам, однако созданная символическая ссылка не открывается программным обеспечением, которое хочет ее открыть.

Steve Cohen 22.06.2024 23:45

Другие вопросы по теме