Как написать программу, которая работает на разных ОС? - PullRequest
0 голосов
/ 07 декабря 2018

Вопрос, который я задаю, немного неясен, я думаю, что это немного сложно объяснить только одной строкой.Вот моя ситуация: у меня есть реперториум Bitbucket, который клонируется как в среде Linux, так и в среде Windows.У меня проблема:

1 - мне нужно читать и писать из файлов, и пути к разным местам нужно менять каждый раз, когда я фиксирую и нажимаю.Следовательно, если я работал над Windows и сделал толчок, когда я возвращаюсь в Linux и мне нужно вытащить и изменить пути, которые я использовал.

2 - Я использую селен на Python.Чтобы это работало на моей машине без Linux, мне нужно создать виртуальный дисплей с библиотекой pyvirtualdisplay.Следовательно, некоторый код, который должен быть выполнен на моей машине с Linux, не должен выполняться на моей машине с Windows.

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

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

Ответы [ 2 ]

0 голосов
/ 07 декабря 2018

Ваша первая проблема может быть решена путем обработки путей в файле конфигурации вместо их жесткого кодирования в самой программе (и, возможно, с использованием модулей pathlib или os.path для фактических манипуляций с путями), а затем с указанием git чтобы игнорировать файл конфигурации.Затем вы можете создать соответствующие конфигурации в каждой системе, и git не будет их вообще беспокоить.

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

  • os.name: Содержит posix, nt или java, который определяет, какой тип ОС вы используете.java для Jython, nt для Windows , posix` для почти всего остального.Полезно, когда вы просто заботитесь об определенной низкоуровневой семантике ОС.
  • sys.platform: Содержит общее имя для базового ABI ОС.win32 для Windows, darwin для macOS, linux для Linux и имя ОС для других вариантов UNIX.Это позволяет вам проверять конкретные базовые платформы и обычно используется для условного кода, который выполняется только на одной платформе.Обязательно всегда проверяйте это с помощью конструкции, подобной sys.platform.startswith('X'), поскольку некоторые платформы и реализации Python содержат информацию о версии после имени ОС.
  • platform.system(): аналогично sys.platform, за исключением того, что возвращаемая строкаболее удобный для пользователя (Windows для Windows, Linux для Linux и т. д.), и он возвращает пустую строку, если не может определить, на какой ОС вы работаете.Полезно для отображения ОС пользователю, но не для выполнения условий (потому что она в свободной форме и не всегда может возвращать полезную информацию).
0 голосов
/ 07 декабря 2018

Довольно просто.Вам нужно импортировать модуль 'os'.

import os

Затем вы можете получить «имя» текущей работающей операционной системы, проверив: os.name.

После этого вы можете основывать операторы if или case, или как вы хотите управлять своим кодом, на том, о какой ОС сообщается.

Чтобы было ясно, я бы обернул код, который хочу запустить тольков определенной среде в операторе if, который определяет, какая ОС работает, и выполняет соответствующий блок кода на основе результата.

if [[ os.name == "nt" ]]; then ;do Windows stuff else ;do linux stuff fi

Дополнительное примечание!Это был psuedocode, основанный на общих сценариях Bash.Это псевдокод Python:

if os.name == "nt": ; Do Windows Stuff else: ; Do Linux Stuff

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...