Spouštění programů v Pythonu

Již víme, že v Pythonu se programem rozumí textový soubor (většinou s příponou .py) který obsahuje pravidla jazyka Python respektující popis kroků, které je třeba vykonat.

Vyzkoušíme si jak takový program několika různými způsoby spustit. Abyste nemuseli příslušný kód programu ručně přepisovat, naleznete jej zde test1.py.

Seznámíme se se třemi způsoby, jak spustit existující *.py soubor

  • Na příkazové řádce počítače s OS Windows

  • V IDE Visual Studio Code

  • V prostředí cloudové služby Google Colab

Je běžným způsobem práce, že vyjdete z nějakého existujícího kódu, ten upravíte pro své potřeby a následně spustíte. V dnešní době je i v úvodním kurzu programování nutno dodat, že původní kód může obsahovat nějaké zákeřnosti a jeho spuštěním jim můžete dovolit páchat nekalosti. V tomto smyslu je práce pomocí Google Colab zdaleka nejbezpečnější.

Spouštění *.py na příkazové řádce

Práce na příkazové řádce sice právem připomíná počítačový pravěk, ale nikterak nezastarala a dnes představuje způsob, kterým se spouštějí i ty nejrozsáhlejší výpočty. Protože uživatelé Linuxu tohle umí, vysvětlíme si to pro prostředí Windows, kde jde o méně obvyklý způsob práce.

Nejprve je potřeba spustit program, který nám ovládat počítač příkazy umožní. Použijeme ten starší, který se jmenuje cmd.exe, novější a složitější PowerShell budeme ignorovat. Zadáním cmd.exe do vyhledávací kolonky start menu dokážete tento program spustit. Objeví se vám okénko, které obsahuje tzv. prompt, tedy výzvu k zadání příkazu. Většinou má prompt podobu výpisu běžného adresáře následovaného znakem vetší.

Na následujícím obrázku vidíte výsledek provedení čtyř příkazů

  • cd novy_adresar ... změní běžný adresář. To je užitečné, když si chceme ušetřit práci, protože soubory z běžného adresáře oslovujeme jen jménem, zatímco k souborům v ostatních adresářích musíme přidat relativní nebo absolutní cestu.

  • dir [cesta/maska] ... vypíše seznam souborů v běžném adresáři. Pokud je uvedena maska (např. *.py) vypíše jen ty soubory, jejichž jméno má požadovaný tvar. Lze zadat i cestu k jinému, než běžnému adresáři.

  • type soubor ... vypíše obsah souboru.

  • python program.py ... spustí kód v jazyce python zapsaný v souboru, který je uveden jako parametr.

Na pozadí je stejný adresář otevřen i souborovém manažeru Windows, povšimněte si podrobností, které sděluje o souboru test1.py a srovnejte je s výpisem příkazu dir.

python on command line

Ačkoli takto často pracovat nebudete, je nezbytné výše uvedenému rozumět. Jediným krokem, který jsme výše ignorovali je psaní kódu. To lze svěřit běžnému textovému editoru, rozumnou volbou na Windows je program Notepad++. Spojení textového editoru s pomůckami pro práci s kódem a jeho laděním představuje tzv. integrované vývojové prostředí (IDE).

Spouštění *.py ve IDE

Tentýž kód můžeme spustit z IDE, konkrétně budeme používá VS Code.

Na obrázku níže vidíte program test1.py otevřený v jeho editoru (pravý horní panel) a výsledek jeho běhu (pravý dolní panel nesoucí záhlaví "terminal" a vzhledově podobný příkazové řádce výše). Běh byl spuštěn tlačítkem > vpravo nahoře. Všimněte si, že v terminálovém okně jsou uvedeny absolutní cesty (běžného adresáře, interptetu pythonu a spouštěnému programu).

python in VScode

Spouštění *.py v Jupyteru

U jednodušších kódů je možnost obsah souboru *.py zkopírovat do jedné buňky sešitu prostředí Jupyter a buňku "spustit". Potíže budou mohou nastat, pokud kód např. vyžaduje čtení ze standardního vstupu (ovšem funkce input(...) by mohla fungovat. ) Do prostředí Google Colab je potřeba dodat potřebné vstupní soubory a naopak výstupní soubory bezpečně uložit, protože virtuální stroje v tomto prostředí jsou vytvořeny ve výchozí podobě bez uživatelských dat a po odpojení se data zase zahodí. To se netýká vlastního kódu a jeho výstupu obsaženého v sešitě *.ipynb.

Pak je tu také možnost využít příkazovou řádku obsaženou v Jupyteru. Její příkazy se uvozují vykřičníkem. Protože ten běží nad prostředím Linuxu, požíváme např. místo dir příkaz ls. Protože běh programu se odehrává na serveru, zatímco uživatelská komunikace v prohlížeči, není (zatím?) možné spouštěnému programu zadávat vstup z klávesnice.

[1]:
# soubor se kódem programu uložíme z webu na lokální disk

! wget https://utf.mff.cuni.cz/~ledvinka/PrProgFyz/2023/py/test1.py
--2023-09-22 16:29:26--  https://utf.mff.cuni.cz/~ledvinka/PrProgFyz/2023/py/test1.py
Resolving utf.mff.cuni.cz (utf.mff.cuni.cz)... 195.113.23.4
Connecting to utf.mff.cuni.cz (utf.mff.cuni.cz)|195.113.23.4|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 330 [text/x-python]
Saving to: 'test1.py'

test1.py            100%[===================>]     330  --.-KB/s    in 0s

2023-09-22 16:29:26 (13,4 MB/s) - 'test1.py' saved [330/330]

[2]:
# přesvědčíme se, že obshauje požadovaný kód
! head test1.py
# Program hledá trojciferná Armstrongova čísla
# tedy čísla jako 153 = 1^3 + 5^3 + 3^3

for i in range(1,10):         # první cifra
  for j in range(0,10):       # druhá cifra
    for k in range(0,10):     # třetí cifra
      a = i*100+j*10+k
      if  a == i**3+j**3+k**3:
        print(f"{a} = {i}^3 + {j}^3 + {k}^3")
[4]:
# a konečně kód sputíme

!python3 test1.py
153 = 1^3 + 5^3 + 3^3
370 = 3^3 + 7^3 + 0^3
371 = 3^3 + 7^3 + 1^3
407 = 4^3 + 0^3 + 7^3