
Anatoly
23.03.2017
07:47:08
надо разобраться.

Alexey
23.03.2017
07:47:18
Мне пока недосуг, потом если не зарешаешь — гляну чо как.
@zartsoft смотри какая муть.

Zart
23.03.2017
07:48:31

Google

Zart
23.03.2017
07:48:48
в виндовом нормально работает #!/usr/bin/python3[.x]
python3.exe не нужен

Anatoly
23.03.2017
07:49:40
не надо тут всех за дебилов всё-таки считать, ок?

Zart
23.03.2017
07:49:56
$ ?
засунь свой цигвин себе в анус

Alexey
23.03.2017
07:50:05
Внимание!
Чтобы получить ответ вопрос надо строить так: у меня питон версии Й, есть Х, версии М, мне нужно от него П, я проделал Е, я гуглил и читал про С, но не получается Б.
Чат для начинающих или чувствительных: https://telegram.me/python_beginners
Питоновый грубый чат без обиняков: https://telegram.me/rudepython
Книжки уже есть в канале, ищите по хештегу #manual

Petr
23.03.2017
07:50:12
кстати, а с энвом ок будет под вендой?

Anatoly
23.03.2017
07:50:21
это cmd.exe с изменённым prompt

Zart
23.03.2017
07:50:43
а "bash:" в ошибке тебе тоже cmd.exe написал?

Petr
23.03.2017
07:50:54
ггг

Zart
23.03.2017
07:51:07
если ты гоняешь под говноэмуляторами нативный софт - пройди нахуй

Anatoly
23.03.2017
07:51:11

Google

Zart
23.03.2017
07:51:18
ну
твой ссаный баш и читает шибенг

Anatoly
23.03.2017
07:51:36
ок, ок. минуту

Zart
23.03.2017
07:51:36
к нему претензии

Anatoly
23.03.2017
07:52:10
D:\Repos>test.py - запускает ёбаный редактор
это, видимо, лучше.
#!/usr/bin/python3
print(123)
это test.py

Zart
23.03.2017
07:53:56
D:\>edit test.py
D:\>type test.py
#!/usr/bin/python3
import sys
print(sys.version)
D:\>test.py
3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)]

Anatoly
23.03.2017
07:54:46

Zart
23.03.2017
07:55:13
покажи мне вывод команд:
assoc .py
ftype python.file
D:\>assoc .py
.py=Python.File
D:\>ftype python.file
python.file="C:\Windows\py.exe" "%L" %*

Anatoly
23.03.2017
07:56:25
ага, питон лончер нужен.

Zart
23.03.2017
07:56:40
дык он в комплекте ж идёт с 3.3 где-то

Anatoly
23.03.2017
07:56:44
спасибо. вывод:
D:\Repos>ftype python.file
File type 'python.file' not found or no open command associated with it.
D:\Repos>assoc .py
File association not found for extension .py

Zart
23.03.2017
07:56:52
элол
как ты это ставил аще?

Anatoly
23.03.2017
07:57:34
криворучками, видать.

Google

Zart
23.03.2017
07:59:34
если скрещивать с башем, то надо учитывать кучу нюансов
потому что у цигвина и мсиса разное поведение, разная эмуляция

Anatoly
23.03.2017
08:00:11
мы всех заставляем ставить мсис.

Zart
23.03.2017
08:00:16
звери
хватает того что полный комплект и так с виндовым гитом прилагается

Anatoly
23.03.2017
08:00:46

Zart
23.03.2017
08:00:59
т.е. настраиваете патх на тамошний мсис

Anatoly
23.03.2017
08:09:08
ну да.

Zart
23.03.2017
08:10:59
и зачем вы ломаете людям систему?

Anatoly
23.03.2017
08:13:47
и зачем вы ломаете людям систему?
ну, если есть другой нормальный способ работать с env шибенгами, то я всегда готов научиться.
с установленным "башем" от msys получается писать билд-скрипты один раз и они работают и у виндоёбов, и у макоёбов. очень удобно.

Zart
23.03.2017
08:14:42
это какойто пиздец

Anatoly
23.03.2017
08:15:00
наверно, да.

Zart
23.03.2017
08:15:18
я ебал например с билдами студии работать из под баша
вы сишный софт не собираете в процессе?

Anatoly
23.03.2017
08:16:31
можно заставить макоёбов поставить повершелл. но тогда мне надо будет переступить через своё отвращение к нему.

Zart
23.03.2017
08:16:56
павершелл для работы как шелл неудобен примерно полностью
гонять тамошние кмдлеты - это ок
гонять бинарники с диска - параша

Anatoly
23.03.2017
08:18:04
блядь, а мсис проёбывается с нормальным шибенгом и лончером. Вот тварь.

Zart
23.03.2017
08:18:14
в ряде случаев надо корректно квотить всё подряд и запускать через
& "some\fucking.exe" ...

Google

Anatoly
23.03.2017
08:18:36


Zart
23.03.2017
08:18:39
шибенг в питоне через ихний лянчер
в нормальном варианте когда запускается питоноскрипт через кмд/эксплорер/чонитьвиндовое, происходит цепочка:
ShellExecute (экпслорер) читает реестр, в поисках ассоциации для .py, находит питон.файл, получает оттуда py.exe
CreateProcess(py.exe, script.py, args)
py.exe смотрит на аргументы и ключи
раз всяких -2/3 нет, значит смотрим первые байты скрипта
читаем оттуда, и определяем
если там /usr/bin/env - значит ищем по PATH
если там /usr/bin/python - значит ищем строго по реестру
выдираем версию из шибенга, консультируемся с py.ini (через это можно например заставить работать впридачу и pypy/iron/jy) и возможно маппим на другую строку
если же там #!"any exe" то строка останется как есть
с ней новый запуск CreateProcess(exe, script, args)
вся эта цепочка позволяет шибенгам работать примерно как в никсах, но при этом в цепочке процессов у нас еще и py.exe висеть будет
при этом весь механизм работает чисто за счет обычного механизма винды и py.exe
в случае же со всякими мсисами и цигвинами - те пытаются эмулировать позикс.
в честном позиксе шибенг обрабатывается ядром, программы тупо гоняют exec/spawn/system ('script.py')
цигвины/башы же для эмуляции читают скрипты напрямую и пытаются повторить то же самое
но при этом чтобы /usr/bin работал надо либо маппить никсовые пути на виндовые, либо полагаться на PATH
и тут начинается гора нюансов
опять же, обработка аргументов абсолютно разная, причем она разная даже между юниксами


Anatoly
23.03.2017
08:27:30
xkcd про стандарты. Спасибо большое.
Я твою простыню сейчас спизжу в gist, ок?

Admin
ERROR: S client not available


Zart
23.03.2017
08:27:48
https://www.in-ulm.de/~mascheck/various/shebang/ это вообще каноничный ресурс
о том, почему часть никсов хавает весь шибенг, часть лишь первый аргумент, а древние не ели даже и аргументов
Splitting arguments
A very few systems deliver only the first argument, some systems split up the arguments like a shell to fill up argv[],
most systems deliver all arguments as a single string. See the table below. I noticed that for Linux (delivering all arguments as one string),
a patch to split up was suggested on the Linux kernel mailing list (dead link, try this page, archive.org), followed by a discussion of some portability issues.
тут вообще стоит понимать как аргументы в разных ос вообще передаются
в позикс апи аргументы передаются в виде массивов строк
в вин апи аргументы передаются одной длинной строкой
философия обработки совсем разная - в позиксе шелл обязан обрабатывать вайлдкарды, поэтому там например есть всякие shopt которые управляют глоббингом (скажем выдать ошибку если глоб не раскрывается или раскрыть в пустую строку)
запущенный процесс в позиксе получит на входе уже раскрытый в список реальных файлов/аргументов глоб
т.е. ls * превращается в exec(ls, file1, file2, file3)


Anatoly
23.03.2017
08:34:33
это я знаю

Zart
23.03.2017
08:35:01
в вин апи main() как и всегда получает массив, но при этом процесс получает на входе тупо строку (GetCommandLine), и црт0 код парсит его согласно своих правил

Anatoly
23.03.2017
08:35:33
наебался несколько раз на больших глобах, пришлось xargs выучить.

Zart
23.03.2017
08:35:33
dir * превращается в CreateProcess(cmd, /c, dir, *)

Anatoly
23.03.2017
08:36:13
на винде уткнулся один раз в 64k ограничение, когда из msbuild генерил вызов своей тулы

Google

Zart
23.03.2017
08:36:23
в студии есть отдельный объектный файлик который можно прилинковать, который будет парсить иначе..
https://msdn.microsoft.com/en-us/library/8bch7bkk.aspx тут упоминание про setargv.obj про альтернативный парсинг

Anatoly
23.03.2017
08:37:27
научился тогда "response files" - единственное, я не понял, это стандарт какой или нет. когда все аргументы в файл сливаются по принципу 1 аргумент - одна строка. Я так понял, что это каждый сам для себя придумывает

Zart
23.03.2017
08:37:34
это один из вариантво эмуляции поведения позикса
response files, @-файлы - это соглашение
порт гцц под дос активно юзал этот синтакс на уровне либц чтобы обходить лимит на размеры
в досе лимит на командную строку был вообще в 128 байт, если чо
в линупсах нынче порядка 512кб насколько помню
у винды вроде 32к юникод символа
я изза всех этих нюансов и не люблю помесей нативных виндовых бинарников и позиксоэмуляторов
заставить работать вместе можно, но когда каждый бинарник начинает маппить что и куда попало, начинается пиздец

Anatoly
23.03.2017
08:40:58
я пробовал поддерживать две версии билд-скриптов. это всё закончилось проблемами, к сожалению. Из-за пиздеца с маппингом, мы жёстко лимитируем что можно юзать, а что нет.

Zart
23.03.2017
08:41:21
внезапно правило что "похуй \ или / в путях" перестает работать, например
или аргументы прилетают оверквоченными
если хочется кроссплатформа и не хочется держать разные копии, то вариант ровно один
переходить на питон для билда 8)
ну или там js мейби
но всю логику разницы платформ придётся вхуячивать в скрипты тогда

Stanislav
23.03.2017
08:48:16
А почему дос не пересел на божественные слэши?

Zart
23.03.2017
08:48:33
потому что он их унаследовал от CP/M
точнее не так

Alexey
23.03.2017
08:49:05
В никскиках наших вообще могло быть православное >

Zart
23.03.2017
08:49:06
в CP/M прямые слеши использовались для свитчей
каталогов там еще не существовало
как и в дос 1.0
они появились лишь в дос 2.0

Alexey
23.03.2017
08:49:16
Т.е. натурально >usr>local>bin>python