我有这个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)
C 不是脚本语言。您必须将 spa.c 编译为可执行文件。你不说你的操作系统,但如果是 Mac 或 Linux,试试
gcc spa.c -o spa
Run Code Online (Sandbox Code Playgroud)
如果可行,您现在就有了一个名为 spa 的可执行文件。您可以使用 pythonos.system()来调用它。
| 归档时间: |
|
| 查看次数: |
45766 次 |
| 最近记录: |