У меня есть код C, который принимает файл как вход, обрабатывает его и дает номер в качестве вывода. Я хочу создать веб-страницу html, которая берет путь к файлу как входной, передает его в код C. C-код обрабатывает его, а вывод (integer) отображается в браузере. Не могли бы вы предложить мне, как это сделать? Есть ли готовые программные средства для этого?
Если C-код используется для создания утилиты командной строки, вы можете вызвать его при создании веб-страницы:
#!/usr/bin/env python
import subprocess
from bottle import request, route, run, template # http://bottlepy.org/
command = ['wc', '-c'] # <-- XXX put your command here
@route('/')
def index():
filename = request.query.filename or 'default' # query: /?filename=<filename>
output = subprocess.check_output(command + [filename]) # run the command
return template("""<dl>
<dt>Input</dt>
<dd>{{filename}}</dd>
<dt>Output</dt>
<dd>{{output}}</dd></dl>""", filename=filename, output=output)
run(host='localhost', port=8080)
Запустите этот скрипт или вставьте его в консоль Python, затем откройте свой браузер и передайте имя файла (путь на сервере) в качестве параметра запроса:
$ python -mwebbrowser http://localhost:8080/?filename=/etc/passwd
wc -c
печатает количество байтов для каждого входного файла. Он выполняется на сервере.
Если C-код доступен как библиотека; вы можете использовать модуль ctypes
для вызова функции C из Python, например, для вызова printf()
C из библиотеки libc
:
#!/usr/bin/env python
import ctypes
from ctypes.util import find_library
try:
libc = ctypes.cdll.msvcrt # Windows
except OSError:
libc = ctypes.cdll.LoadLibrary(find_library('c'))
n = libc.printf("abc ")
libc.printf("%d", n)