Измените LD_LIBRARY_PATH среды текущего процесса

Иногда желательно знать, какое устройство бренда использует клиент, чтобы показывать контент, относящийся к этому устройству, например, ссылку на магазин iPhone или на рынок Android. Модернизатор хорош, но показывает только возможности браузера, такие как HTML5 или Flash.

Вот мое решение UserAgent в jQuery для отображения разных классов для каждого типа устройства:

/*** sniff the UA of the client and show hidden div's for that device ***/
var customizeForDevice = function(){
    var ua = navigator.userAgent;
    var checker = {
      iphone: ua.match(/(iPhone|iPod|iPad)/),
      blackberry: ua.match(/BlackBerry/),
      android: ua.match(/Android/)
    };
    if (checker.android){
        $('.android-only').show();
    }
    else if (checker.iphone){
        $('.idevice-only').show();
    }
    else if (checker.blackberry){
        $('.berry-only').show();
    }
    else {
        $('.unknown-device').show();
    }
}

Это решение от графических маньяков http://graphicmaniacs.com/note/detecting- iphone-ставка-IPAD-андроид-и-ежевика-браузер с JavaScript-и-PHP-/

22
задан David Wolever 28 July 2016 в 22:20
поделиться

3 ответа

Причина, по которой

os.environ["LD_LIBRARY_PATH"] = ...

не работает, проста: эта переменная среды управляет поведением динамического загрузчика ( ld-linux.so.2 в Linux, ] ld.so.1 в Solaris), но загрузчик просматривает LD_LIBRARY_PATH только один раз при запуске процесса. Изменение значения LD_LIBRARY_PATH в текущем процессе после в этой точке не имеет никакого эффекта (как и сказано в ответе на этот вопрос).

У вас есть некоторые варианты:

A. Если вы знаете, что вам понадобится xyz.so из / some / path , и управляете выполнением скрипта python с самого начала, просто установите LD_LIBRARY_PATH ] по своему вкусу (после проверки того, что он еще не установлен), и повторите попытку. Это то, что делает Java .

B. Вы можете импортировать /some/path/xyz.so по его абсолютному пути до импорта x.so . Когда вы затем импортируете x.so , загрузчик обнаружит, что он уже загрузил xyz.so , и будет использовать уже загруженный модуль вместо повторного поиска.

С. Если вы собираете x.so самостоятельно, вы можете добавить -Wl, -rpath = / some / path в его строку ссылки, а затем импортировать x.so заставит загрузчик искать зависимые модули в / some / path .

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

C. Если вы собираете x.so самостоятельно, вы можете добавить -Wl, -rpath = / some / path в его строку ссылки, а затем импортировать x.so заставит загрузчик искать зависимые модули в / some / path .

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

C. Если вы собираете x.so самостоятельно, вы можете добавить -Wl, -rpath = / some / path в его строку ссылки, а затем импортировать x.so заставит загрузчик искать зависимые модули в / some / path .

33
ответ дан 29 November 2019 в 04:50
поделиться

По моему опыту, попытка изменить способ работы загрузчика для работающего Python очень сложна; возможно зависит от ОС / версии; может не работать. Один обходной путь, который может помочь в некоторых обстоятельствах, - это запустить подпроцесс, который изменяет параметр среды с помощью сценария оболочки, а затем запустить новый Python с помощью оболочки.

0
ответ дан 29 November 2019 в 04:50
поделиться

well, the environment variables are stored in the dictionary os.environ, so if you want to change , you can do

os.environ["PATH"] = "/usr/bin"
-5
ответ дан 29 November 2019 в 04:50
поделиться
Другие вопросы по тегам:

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