在python中执行C程序?

时间:2010-12-07 12:08:24

标签: python c

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

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

找到

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

更新2 :我使用gcc编译了源代码,但是现在它在尝试调用()时给了我一个权限,即使以root身份运行python(im在Ubuntu 10:10上)

更新3 [Errno 8]执行格式错误

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

全部谢谢!

6 个答案:

答案 0 :(得分:44)

没有 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"])

答案 1 :(得分:12)

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 :(得分:4)

这是源代码。你必须在做任何事情之前编译它。它不是可执行的。

答案 3 :(得分:4)

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

  gcc spa.c -o spa

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

答案 4 :(得分:4)

没有C 脚本这样的东西你需要编译C程序......如果编译成可执行文件,你可以使用os.system(CommandLine)执行它

答案 5 :(得分:0)

问题仍然很老,我感到一个重要的部分不见了!

可以在Python脚本中编译和执行C代码:

UserCol = Application.InputBox(" Please enter the column...", Type:=0)
Set Z = Range(UserCol & 5)

我提到了Quora上的帖子:https://www.quora.com/How-do-I-write-a-Python-script-to-run-a-C-program