在python中执行C程序?

2024-05-16 02:47:02 发布

您现在位置:Python中文网/ 问答频道 /正文

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

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

(请不要被url中的“register”吓坏,如果您填写了表单,您可以立即下载文件(没有验证邮件等),我会尝试您的建议并报告结果。

更新2:我使用gcc编译了源代码,但现在它在尝试调用()时给了我一个被拒绝的权限,甚至在以根用户身份运行python(在Ubuntu 10:10上的im)时也是如此。

更新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

谢谢大家!


Tags: 文件方法程序脚本registerhttp参数源代码
1条回答
网友
1楼 · 发布于 2024-05-16 02:47:02

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)
网友
2楼 · 发布于 2024-05-16 02:47:02

不存在C脚本。如果您的意思是一个C程序,那么在运行它之前,您需要将spa.cspa.h编译成一个可执行文件。

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

$ gcc -Wall spa.c -o spa

将获得名为spa的可执行文件。

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

from subprocess import call
call(["./spa", "args", "to", "spa"])
网友
3楼 · 发布于 2024-05-16 02:47:02

这是源代码。在使用它之前你必须先编译它。它不能按原样执行。

相关问题 更多 >