Windows / Cygwin / Python: разрешение зависит от ручного ввода или сценария оболочки?

Я только что нашел очень простое и хорошее решение

$ sudo apt install overlayfsroot

$ sudo vim /etc/overlayfsroot.conf

измените последнюю строку на

overlayfsroot ="tmpfs"

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

0
07.09.2017, 01:33
1 ответ

Я не Я точно не знаю, в чем проблема, но вот несколько моментов:

Среда

Мое первое предположение — это разница в среде при использовании терминала cygwin и при выполнении bash через командный файл.

При запуске из терминала cygwin выполните команду env, чтобы увидеть, что такое среда (прошло некоторое время с тех пор, как я использовал Windows, но я подозреваю, что env является частью cygwin или встроен в bash) .

Затем добавьте ту же команду в начало сценария оболочки.

#!/bin/sh
export DISPLAY=:0.0
env
python c:/users/<my directories>/<python-file>.py

Сравните две среды и посмотрите, есть ли различия.

pro-tip: вы можете записать вывод команды envв файл с env > c:/users/<ваши каталоги>/env1.txt(затем используйте env2.txtиз вашего сценария оболочки), а затем сравните их с помощью инструмента командной строки diff. то есть diff env1.txt env2.txt.

Интерпретатор

Следующее, что связано, но какой интерпретатор Python выполняется в каждом случае.В вашей системе установлен только один Python? Или может у вас их несколько. Например, вы устанавливали и через cygwin, и через anaconda?

Если у вас их несколько, проверьте, какая версия выполняется с помощью , какой pythonв каждом случае.

Инструментарий графического интерфейса

Какой инструментарий графического интерфейса вы используете. Я не знаком с API winfo_screenwidth(). Предположительно это обеспечивается какой-то библиотекой/пакетом, который вы используете. Какой это пакет?

Я не уверен насчет мира windows/cygwin, но в мире linux программа может определить, является ли stdinтерминалом. Набор инструментов, который вы используете, может вести себя по-разному в обоих случаях. Если это так, документация по набору инструментов поможет найти эту информацию.

Кроме того, у IIRC есть два способа запуска программы в Windows. Есть стандартный способ, т.е. int main()и способ с графическим интерфейсом (в данном случае я не помню название основной функции). Я помню, что для некоторых интерпретируемых языков существуют разные двоичные файлы интерпретатора в зависимости от того, какую точку входа вы хотели. Графический интерфейс может начинаться или заканчиваться w. Например, я думаю, что javaw.exe— это версия графического интерфейса, а java.exe— консольная версия (для java). Есть ли аналог Python в Windows?

3
28.01.2020, 02:33

Теги

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