Выполнение программы C в python?
У меня есть эта программа на C, по крайней мере, я думаю, что это (файлы: spa.c, spa.h). Есть ли способ, которым я могу выполнить этот script из Python WITHOUT, передавая дополнительные аргументы интерпретатору Python (если нет, какими будут аргументы?)
Обновить. Спасибо за ваши ответы. Исходный код можно найти на http://www.nrel.gov/midc/spa/#register
(Пожалуйста, не бойтесь "register" в URL-адресе, если вы заполните форму, вы можете сразу загрузить файлы (нет писем с подтверждением и т.д.). Я попробую ваши предложения и отчитаюсь с результатами.
Обновление 2. Я скомпилировал исходный код с помощью gcc, но теперь он дает мне разрешение, запрещенное при попытке вызова(), даже при запуске python как root (im on Ubuntu 10:10).
Обновить 3 [Errno 8] Ошибка формата Exec
Обновление 4 Хорошо, я получил его работу. Программа выводит значения с помощью printf:
>>> call(['/path'])
Julian Day: 2452930.312847
L: 2.401826e+01 degrees
B: -1.011219e-04 degrees
R: 0.996542 AU
H: 11.105902 degrees
Delta Psi: -3.998404e-03 degrees
Delta Epsilon: 1.666568e-03 degrees
Epsilon: 23.440465 degrees
Zenith: 50.111622 degrees
Azimuth: 194.340241 degrees
Incidence: 25.187000 degrees
Sunrise: 06:12:43 Local Time
Sunset: 17:20:19 Local Time
Спасибо всем!
Ответы
Ответ 1
Нет такой вещи, как C script. Если вы имели в виду программу C, вам нужно скомпилировать spa.c
и spa.h
в исполняемый файл перед его запуском.
Если вы используете GCC в Linux или Mac OS X:
$ gcc -Wall spa.c -o spa
Вы получите исполняемый файл с именем spa
.
После этого вы можете запустить программу spa
с вашего Python script с помощью:
from subprocess import call
call(["./spa", "args", "to", "spa"])
Ответ 2
cinpy близок, используя потрясающую комбинацию tcc и ctypes
Следующий код вырывается из cinpy_test.py, включенного в пакет.
import ctypes
import cinpy
# Fibonacci in Python
def fibpy(x):
if x<=1: return 1
return fibpy(x-1)+fibpy(x-2)
# Fibonacci in C
fibc=cinpy.defc("fib",
ctypes.CFUNCTYPE(ctypes.c_long,ctypes.c_int),
"""
long fib(int x) {
if (x<=1) return 1;
return fib(x-1)+fib(x-2);
}
""")
# ...and then just use them...
# (there _is_ a difference in the performance)
print fibpy(30)
print fibc(30)
Ответ 3
Это исходный код. Вы должны скомпилировать его, прежде чем что-либо делать с ним. Он не является исполняемым, как есть.
Ответ 4
C не является языком сценариев. Вы должны скомпилировать spa.c в исполняемый файл. Вы не говорите свою ОС, но если Mac или Linux, попробуйте
gcc spa.c -o spa
Если это работает, теперь у вас есть исполняемый файл имени spa. Вы можете использовать python os.system()
для его вызова.
Ответ 5
нет такой вещи, как C script вам нужно скомпилировать C-программы... если вы скомпилируете исполняемый файл, вы можете выполнить его с помощью os.system(CommandLine)
Ответ 6
Вопрос старый, но я чувствовал, что одна важная часть отсутствует!
Код C может быть скомпилирован и выполнен в скрипте Python:
#include <iostream>
using namespace std;
int main(){
cout<<"Hello World\n";
return 1;
}
import subprocess
subprocess.call(["g++", "hello_world.cpp"]) # OR gcc for c program
tmp=subprocess.call("./a.out")
print("printing result")
print(tmp)
$ python main.py
Hello World
printing result
1
Я сослался на пост на Quora: https://www.quora.com/How-do-I-write-a-Python-script-to-run-aC-program