Python работает по-другому с nohup

1850
ericksonla

У меня есть пакет Python, который отлично работает, когда я запускаю как python -m myproject. Тем не менее, когда я запускаю как nohup python -m myproject, я получаю ImportError. Кроме того, когда я запускаю как nohup python3 -m myproject, он работает нормально.

Похоже, проблема в том, что my pythonимеет псевдоним python3, тогда как nohup каким-то образом использует нестандартный python. С чего бы это?

2
Можете ли вы запустить следующие команды в вашей оболочке и опубликовать их вывод? `Какие Python` и` Тип Python` David Grayson 7 лет назад 0
@DavidGrayson `python` - это псевдоним в` / usr / bin / python` для `/ usr / bin / python3` ericksonla 7 лет назад 0
Я не уверен, что вы имеете в виду. Каковы выходные команды, о которых я упоминал выше, и каковы выходные данные `readlink / usr / bin / python`? Какой дистрибутив Linux / Unix вы используете и устанавливали ли вы Python с помощью менеджера пакетов дистрибутива? David Grayson 7 лет назад 0
тип python >> python имеет псевдоним `/ usr / bin / python3 '; какой питон >> / usr / bin / python; readlink / usr / bin / python >> python2.7; То, что тип python и тип python указывают разные направления, очень странно для меня! ericksonla 7 лет назад 0

1 ответ на вопрос

2
David Grayson

Ваша оболочка (вероятно, bash) имеет псевдоним, назначенный таким образом, что всякий раз, когда вы печатаете pythonв начале команды, он меняет его на /usr/bin/python3. Мне трудно сказать, почему у вас есть этот псевдоним. Возможно, ваш системный администратор хочет, чтобы все использовали Python 3 вместо Python 2 по умолчанию, и это была попытка сделать это.

Ваша /usr/bin/pythonсимволическая ссылка на двоичный файл Python 2. Это кажется вполне нормальным; во многих дистрибутивах Linux (таких как Debian) pythonпринято ссылаться на Python 2, потому что Python 3 еще недостаточно популярен. Это не всегда так; в Arch Linux pythonотносится к Python 3.

Так что, если я должен был догадаться, я бы сказал, что менеджер пакетов вашей системы установлены символические ссылки от /usr/bin/pythonдо, /usr/bin/python2.7потому что его политика для людей, чтобы использовать Python 2 по умолчанию. Но кто-то еще, кто высказался по поводу настройки вашей системы, решил, что они хотят использовать Python 3 по умолчанию, поэтому они установили этот псевдоним.

Как видите, псевдоним не работает все время. Когда вы печатаете nohup python, оболочка не раскрывает ваш псевдоним, а просто передает строку pythonв качестве аргумента nohupкоманды. Затем nohupкоманда должна выяснить, что pythonозначает, и все, что она делает, это посмотреть на ваш PATH; он не знает о ваших псевдонимах оболочки. Он найдет /usr/bin/pythonи в конечном итоге запустит Python 2 для вас.

Вы можете прочитать руководство по вашей оболочке, чтобы узнать, какие файлы она запускает при запуске (например, .bashrc и тому подобное). Это поможет вам выяснить, почему ваша оболочка имеет этот псевдоним для Python 3. Найдите строку, подобную этой:

alias python=python3 

Вы можете прочитать о менеджере пакетов системы, чтобы выяснить, как посмотреть, какие файлы принадлежат каким пакетам, и это может помочь вам выяснить, почему существует символическая ссылка для Python 2. Просто спросите менеджера пакетов, какому пакету принадлежит /usr/bin/pythonссылка.

Спасибо за подробное объяснение! Я сам настроил `alias python = python3`, ожидая, что это также сделает` / usr / bin / python` ссылкой на python3. Теперь, когда я доказал, что я представляю угрозу для своей системы, а также обнаружил PEP394, возможно, я просто верну его к исходному состоянию. ericksonla 7 лет назад 1