我有这个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
全部谢谢!
答案 0 :(得分:44)
没有 C脚本这样的东西。如果你的意思是 C程序,你需要在运行它之前将spa.c
和spa.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