#xonsh
Вопрос:
У меня есть функция в Xonsh, которую я пытаюсь использовать как команду (т. Е. Без родителей). При необходимости функция должна принимать аргументы, однако всякий раз, когда я вызываю функцию без аргументов, я просто получаю адрес функции. Как вызвать функцию с дополнительными параметрами?
Вот пример:
def _up(args, stdin=None):
# go up any number of directories
if not args or len(args) < 1:
args[0] = 1
balloons = ('../' * int(args[0]))
# echo @(balloons)
cd @(balloons)
aliases['up'] = _up
Когда я звоню up
без параметров, я получаю <function __main__.up>
. Когда я называю это так, это работает: up 2
.
Я мог бы выполнить такую функцию, которая работает, но тогда я не смогу ее вызвать, не используя скобки (т. Е.: В качестве команды), что я бы предпочел:
def up(dirs=1):
# go up any number of directories
balloons = ('../' * dirs)
# echo @(balloons)
cd @(balloons)
Вызов up()
и up(2)
то и другое работают таким образом, но это более обременительно, чем просто вызов up
или up 2
. Как правильно сделать то, что я пытаюсь сделать в Ксоне?
Ответ №1:
Я не уверен, почему вы получаете функцию repr
, когда не передаете аргумент, но исправленная версия вашей функции работает:
def _up(args): # don't need stdin
# go up any number of directories
if not args or len(args) < 1:
args = [1] # if args is None you can't index to it
balloons = ('../' * int(args[0]))
# echo @(balloons)
cd @(balloons)
aliases['up'] = _up
в текущей main
xonsh
версии @ c2f862df
это работает , чтобы подняться на один уровень с помощью всего одного up
или вы можете указать много уровней up 3
и т. Д.
Комментарии:
1. Ах… комбинация ошибки в моем сценарии и того факта, что у меня была и функция, и псевдоним под названием «вверх» из-за борьбы с этим. При вызове без параметров он использовал функцию repr, при вызове с аргументами он использовал псевдоним. Таким образом, проблема, по-видимому, больше связана с моим ожиданием, что назначение псевдонима переопределит все остальное в области действия. Спасибо за помощь!