Попытка получить getopts для вызова функции [ duplicate]

Вы можете установить Python-3.6 на Debian 8 следующим образом:

wget https://www.python.org/ftp/python/3.6.9/Python-3.6.9.tgz
tar xvf Python-3.6.9.tgz
cd Python-3.6.9
./configure --enable-optimizations --enable-shared
make -j8
sudo make altinstall
python3.6

Рекомендуется использовать make altinstall согласно официальному сайту.

Если вы хотите, чтобы pip был включен, вам нужно добавить --with-ensurepip=install в вызов configure. Более подробную информацию смотрите в ./configure --help.

Предупреждение: make install может перезаписать или замаскировать двоичный файл python. make altinstall рекомендуется вместо make install, поскольку он устанавливает только exec_prefix/bin/pythonversion.

Некоторые пакеты должны быть установлены, чтобы избежать некоторых известных проблем, см: Общие проблемы сборки (обновлено)

Ubuntu/Debian:

sudo apt-get install -y make build-essential libssl-dev zlib1g-dev libbz2-dev \
libreadline-dev libsqlite3-dev wget curl llvm libncurses5-dev libncursesw5-dev \
xz-utils tk-dev libffi-dev liblzma-dev

Альтернатива libreadline-dev:

sudo apt install libedit-dev

Fedora/CentOS/RHEL (aws ec2):

sudo yum install zlib-devel bzip2 bzip2-devel readline-devel sqlite sqlite-devel \
openssl-devel xz xz-devel libffi-devel

Альтернатива openssl-devel:

sudo yum install compat-openssl10-devel --allowerasing

Обновление

Вы можете скачать последнюю версию python-x.y.z.tar.gz с здесь.

Чтобы установить версию python по умолчанию и легко переключаться между ними, вам нужно обновить update-alternatives с помощью нескольких версий python.

Допустим, вы установили python3.7 на debian stretch, используйте команду whereis python, чтобы найти двоичный файл (*/bin/python). например:

/usr/local/bin/python3.7
/usr/bin/python2.7
/usr/bin/python3.5

Добавьте версии python:

update-alternatives --install /usr/bin/python python /usr/local/bin/python3.7 50
update-alternatives --install /usr/bin/python python /usr/bin/python2.7 40
update-alternatives --install /usr/bin/python python /usr/bin/python3.5 30

Версия python3. 7 с приоритетом 50 теперь ваш python по умолчанию, python -V выведет:

Python 3.7.0b2

Для переключения между ними используйте:

update-alternatives --config python

Пример вывода:

There are 3 choices for the alternative python (providing /usr/bin/python).

  Selection    Path                      Priority   Status
------------------------------------------------------------
* 0            /usr/local/bin/python3.7   50        auto mode
  1            /usr/bin/python2.7         40        manual mode
  2            /usr/bin/python3.5         30        manual mode
  3            /usr/local/bin/python3.7   50        manual mode

Press  to keep the current choice[*], or type selection number: 

1
10.10.2018, 10:16
1 ответ

Чтобы сценарий оболочки мог вызывать функцию, эта функция должна быть определена до ее вызова. В вашем коде этого нет.

Чтобы исправить это, переместите функцию выше цикла синтаксического анализа командной строки.

Кроме того, я бы сделал последний caseтест *), чтобы поймать любую необработанную опцию,(/?никогда не будет соответствовать одному символу опции ). И утилита getoptsуже выдаст сообщение об ошибке, поэтому вам не нужно повторять, что($OPTARGможет быть не тем, что вы используете здесь, а$opt).

1
27.01.2020, 23:42

Теги

Похожие вопросы