Подтвердить что ты не робот

Выполнение программы 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

Спасибо всем!

4b9b3361

Ответ 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