У меня есть скрипт Python, который пытается запустить подпроцесс, запускающий тот же интерпретатор, что и текущий интерпретатор. Интерпретатор подпроцесса должен быть тем же исполняемым файлом, что и текущий интерпретатор. В частности, это должна быть правильная версия, даже если установлено несколько версий Python.
Вот несколько решений, которые почти работают, и причины, по которым они не совсем полны:
Использование sys.executable: Ожидаемый результат sys.executable отличается от его фактической реализации. Он использует потенциально неправильные пути из sys.argv и переменной среды PATH. Например, если sys.argv == [''] и PATH содержит каталог bin, в котором есть python3, sys.executable вернет путь к нему. python3, даже если он НЕ совпадает с текущим интерпретатором (т.е. он относится к более новой версии, чем текущий интерпретатор).
Вывод пути из os.__file__< /код>: этот подход отлично работает для систем Linux, где путь к интерпретатору можно (обычно) безопасно вывести из этого пути (
может быть чем-то вроде /usr/lib/python3.8/os.py, поэтому мы можем сделать вывод, что правильный интерпретатор — /usr/bin/python3.8). Однако этот вывод безопасен только в том случае, если процесс установки текущего интерпретатора Python был «нормальным» (IE это не работает для встроенных установок, пользовательских сборок Python, установленных в нестандартные каталоги и т. д.). Кроме того, я не уверен, что можно реализовать этот вывод независимо от операционной системы.
Теоретически идеальная реализация будет использовать Зависящие от ОС утилиты для определения пути к текущему исполняемому файлу. Скорее всего, это будет означать чтение /proc/self/exe или /proc/{pid}/exe в Linux или GetModuleFileName(GetCurrentModule()) в Windows. Есть ли более простой способ сделать это?
У меня есть скрипт Python, который пытается запустить подпроцесс, запускающий тот же интерпретатор, что и текущий интерпретатор. Интерпретатор подпроцесса должен быть тем же исполняемым файлом, что и текущий интерпретатор. В частности, это должна быть правильная версия, даже если установлено несколько версий Python. Вот несколько решений, которые почти работают, и причины, по которым они не совсем полны: [list] [*]Использование sys.executable: Ожидаемый результат sys.executable отличается от его фактической реализации. Он использует потенциально неправильные пути из sys.argv и переменной среды PATH. Например, если sys.argv == [''] и PATH содержит каталог bin, в котором есть python3, sys.executable вернет путь к нему. python3, даже если он НЕ совпадает с текущим интерпретатором (т.е. он относится к более новой версии, чем текущий интерпретатор). [*]Вывод пути из os.__file__< /код>: этот подход отлично работает для систем Linux, где путь к интерпретатору можно (обычно) безопасно вывести из этого пути ([code]os.__file__[/code] может быть чем-то вроде /usr/lib/python3.8/os.py, поэтому мы можем сделать вывод, что правильный интерпретатор — /usr/bin/python3.8). Однако этот вывод безопасен только в том случае, если процесс установки текущего интерпретатора Python был «нормальным» (IE это не работает для встроенных установок, пользовательских сборок Python, установленных в нестандартные каталоги и т. д.). Кроме того, я не уверен, что можно реализовать этот вывод независимо от операционной системы. [/list] Теоретически идеальная реализация будет использовать Зависящие от ОС утилиты для определения пути к текущему исполняемому файлу. Скорее всего, это будет означать чтение /proc/self/exe или /proc/{pid}/exe в Linux или GetModuleFileName(GetCurrentModule()) в Windows. Есть ли более простой способ сделать это?
У меня есть код ниже, и у меня установлен Chrome Portable по адресу
C:\temp\googlechromepromeportable64\\ p>
# Import the required libraries
import undetected_chromedriver as uc
from selenium.webdriver.chrome.service import Service as ChromeService...
Я разбирался в том, как именно работает переводчик, погуглил и пришел к какому-то выводу, просто хотел, чтобы его исправил кто-то, кто сможет дать мне лучшее понимание работы переводчика. >
Я пытаюсь выяснить, как настроить Log4J2, чтобы я мог направлять, скажем, сообщения уровня INFO и WARN на консоль, одновременно направляя сообщения уровня ERROR в файл. (Для более сложной цели я мог бы захотеть направить сообщения уровня DEBUG в...