在python中执行C程序?

Izz*_*sin 15 c python

我有这个C程序,至少我认为它是(文件:spa.c,spa.h).有没有什么方法可以从Python执行这个脚本而不将额外的参数传递给Python解释器(如果没有,参数会是什么?)

更新:感谢您的回复.源代码可以在http://www.nrel.gov/midc/spa/#register找到

(请不要被网址中的'注册'吓到,如果你填写表格,你可以立即下载文件(没有验证邮件等)我会尝试你的建议并报告结果.

更新2:我使用gcc编译了源代码,但现在它在尝试调用()时给了我一个权限,即使以root身份运行python(im在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
Run Code Online (Sandbox Code Playgroud)

谢谢大家!

Pab*_*ruz 46

没有C脚本这样的东西.如果你的意思是C程序,你需要在运行它之前编译spa.c并编译spa.h成可执行文件.

如果您在Linux或Mac OS X中使用GCC:

$ gcc -Wall spa.c -o spa
Run Code Online (Sandbox Code Playgroud)

会得到一个名为的可执行文件spa.

之后,您可以使用以下命令spa从Python脚本运行程序:

from subprocess import call
call(["./spa", "args", "to", "spa"])
Run Code Online (Sandbox Code Playgroud)


Joh*_*ooy 12

使用tcc和ctypes的令人敬畏的组合,cinpy接近尾声

以下代码从包中包含的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)
Run Code Online (Sandbox Code Playgroud)


Lou*_*nco 5

C 不是脚本语言。您必须将 spa.c 编译为可执行文件。你不说你的操作系统,但如果是 Mac 或 Linux,试试

  gcc spa.c -o spa
Run Code Online (Sandbox Code Playgroud)

如果可行,您现在就有了一个名为 spa 的可执行文件。您可以使用 pythonos.system()来调用它。