frz написав:P.Y. написав:Для башівської роботи Python не вельми зручний, ІМНО, тому роблю навпаки: пишу батник
bash (unix shell scripting) != батник (windows batch scripting)
Хоча зараз воно все більше змішується, наприклад на віндовсі можна використовувати консоль убунти, а на лінуксі можна через wine ранити батники, але поки що різниця все ж є.
Але воно фор хум хау. Може такий код як у вас мав би місце в комерційному проекті, якщо там серваки суто на віндовсі.
Так як основна "кодобаза" (codebase) на Python, то саме мені логічно викликати bash з Python (бо це Flask додаток), а не навпаки. Хіба що декілька регулярних команд буде з crontab, ну там теж можна викликати python, а можна й bash, ще не визначився.
Ніхто й не каже, що баш і батник — це одне й те ж. Але сфера застосування їх приблизно однакова — запускати зовнішні програми (у т.ч., перенаправленням потоків) та виконувати деякі дії з файловою системою. Python та інші високорівневі мови це теж можуть, але там трохи більше писанини й танців з бубном для того, що в мовах оболонок ОС є елементарною дією. Хіба що шел-скрипти на пітоні мають сенс, якщо треба, щоб воно працювало на будь-якій ОС, де є Python.
Узагалі, те, що bash i батник — не одне й те ж, дуже відчувається: синтаксис абсолютно різний, алгоритмічні засоби різні, переписати якийсь незовсім елементарний батник на bash — це, фактично, написати новий скрипт з нуля. В принципі, існує портований баш для вінди — при бажанні, можна користуватися ним, якщо його встановлено в системі. От робота з батником на лінуксі — справді проблема. Якщо є купа коду в вигляді батників, то ніде, крім wine, на лінуксі його не запустиш. Не вистачає якогось кросплатформного інтерпретатора батників, який можна було б повноцінно використовувати в таких ОС, а не лише в пісочниці. Навіть нормальної людської назви для цієї мови не придумали (батник, cmd.exe, командний рядок — ніхто толком не знає, як називається ця мова оболонки ОС).
Щоб не відхилятись від теми суржику:
: || {
@echo Now I''ll start shell:
@bash "%~sf0" %*
@echo No more sh...
@pause & goto :eof
} # :mode=shellscript:
# interp=sh
echo
echo "Hello, I am $SHELL"
if [ $((100/(5*5))) = $((2 + 2)) ] ; then
echo This expr is true
else
echo Not true
fi
echo
(Демонстрація, як вкрутити sh або bash у батник. Файл із цим кодом має розширення .bat i запускається на windows, де також встановлено bash).