Існує безліч способів реалізувати подібну задачу, використовуючи різні технології (CGI, WSGI, веб-сервер на сокетах, або ще можна якийсь фреймворк задіяти…). Якщо програма робиться на CGI (технологія в наш час застаріла, але проста в реалізації), а в якості сервера використовується Apache, то свою пітонівську програму слід розмістити в каталозі cgi-bin. Якщо це wsgi і той же апач, слід подбати, щоб у сервера був відповідний плагін для роботи з wsgi. Або ж пітонівська програма може сама по собі функціонувати як веб-сервер (тоді Апач непотрібен, чи, як варіант, він може з'єднуватися з вашою програмою як проксі). Усе це різні технології, код для них пишеться по-різному (хоча є модулі, що забезпечують роботу wsgi через інші механізми — CGI, вбудований веб-сервер). Якщо використовуються веб-фреймворки, такі як Flask чи Django, вони являють собою надбудову над тим же WSGI чи іншими низькорівневими компонентами.
Судячи з того, що у Вас «виводиться код», Ви просто розмістили свою пітонівську програму на веб-сервері, поряд з html-файлами? Це так не працює, Python — не php, з ним треба більше мороки (див. попередній абзац). Код скрипту також вимагає переробки (інший механізм передачі аргументів — залежить від конкретного варіанту реалізації; якщо хочете зробити з цієї штуки CGI (що, в даному випадку, робиться відносно просто), то також слід попередньо вивести http-хедери, інакше сервер вам скаже про internal server error). Загалом варіант для CGI виглядатиме так:
#!py -3
import os
from urllib.parse import parse_qs
print ("Content-type: text/html\n\n")# (виводимо http-хедер, що закінчується порожнім рядком)
# далі йде безпосередньо вивід програми:
try:
qs=os.environ['QUERY_STRING']
nb=parse_qs(qs)['nb'][0]
print ('length of ', nb, ' is',len(nb),'characters')
except:
# якщо параметр передано не було, слід вивести форму вводу:
print('''
<form method='GET'>
<input name='nb'>
<input type='submit'>
</form>''')