Izz ad-Din Ruhulessin
Tengo este programa en C, al menos creo que lo es (archivos: spa.c, spa.h). ¿Hay alguna manera de que pueda ejecutar este script desde Python SIN pasar argumentos adicionales al intérprete de Python (si no, cuáles serían los argumentos?)
Actualizar: Gracias por sus respuestas. El código fuente se puede encontrar en http://www.nrel.gov/midc/spa/#register
(No se asuste por el ‘registro’ en la URL, si completa el formulario, puede descargar los archivos de inmediato (sin correos de validación, etc.) Probaré sus sugerencias e informaré los resultados.
Actualización 2: Compilé el código fuente usando gcc, pero ahora me da un permiso denegado cuando intento llamar (), incluso cuando ejecuto python como root (estoy en Ubuntu 10:10).
Actualización 3 [Errno 8] Error de formato ejecutivo
Actualización 4 Bien, lo tengo funcionando. El programa genera valores usando 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
¡Gracias a todos!
No existe tal cosa como un guión C. Si te referías a un programa c necesitas compilar spa.c
y spa.h
en un ejecutable antes de ejecutarlo.
Si utiliza CCG en Linux o Mac OS X:
$ gcc -Wall spa.c -o spa
Obtendrá un ejecutable llamado spa
.
Después de eso, puedes ejecutar spa
programe desde su secuencia de comandos de Python con:
from subprocess import call
call(["./spa", "args", "to", "spa"])
-
Que debería
args
: una cadena con argumentos? Por ejemplo:args = "--option for my program"
?– Sigur
13 de noviembre de 2017 a las 22:52
-
Luego
call(["your program", "--option", "for", "my", "program"])
si de hecho desea que la opción sea múltiples argumentos. Tal vez te refierescall(["your program", "--option", "for my program"])
pero solo tú puedes saber eso.– triplete
29 de enero de 2019 a las 9:58
cinpy se acerca usando la increíble combinación de tcc y ctypes
El siguiente código se extrae de cinpy_test.py incluido en el paquete.
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)
-
Alguien sabe donde puedo descargar ‘cinpy’? La URL original ya no está disponible.
– OGP
23 de julio de 2015 a las 6:03
-
Bien, lo encontré en Web Archive.
– OGP
23 de julio de 2015 a las 7:55
-
Aunque Cinpy se ve sin mantenimiento, es una herramienta útil. La horquilla del paquete: github.com/csarn/cinpy. La guía: amundblog.blogspot.com/2008/12/cinpy-or-c-in-python.html
– Hiedra creciente
30 de septiembre de 2018 a las 9:18
C no es un lenguaje de programación. Tienes que compilar spa.c en un ejecutable. No dices tu sistema operativo, pero si Mac o Linux, prueba
gcc spa.c -o spa
Si eso funciona, ahora tiene un spa llamado ejecutable. Puedes usar python os.system()
para llamarlo
Shantanu Pathak
La pregunta es antigua, ¡pero sentí que falta una parte importante!
El código C se puede compilar Y ejecutar dentro del script de Python:
#include <iostream>
using namespace std;
int main(){
cout<<"Hello World\n";
return 1;
}
import subprocess
subprocess.call(["g++", "hello_world.cpp"]) # OR gcc for c program
tmp=subprocess.call("./a.out")
print("printing result")
print(tmp)
$ python main.py
Hello World
printing result
1
Me referí a la publicación en Quora: https://www.quora.com/How-do-I-write-a-Python-script-to-run-aC-program
-
Probablemente deberías preferir
subprocess
sobreos.system()
– triplete
29 de enero de 2019 a las 9:58
¿Podría publicar aquí algunos extractos de su
spa.c
(o, mejor aún, el código completo)? Aunque existen algunas implementaciones de secuencias de comandos similares a C, normalmente C es un lenguaje compilado. Incluso si encuentra algún intérprete de C escrito en Python, las posibilidades de que funcione un programa C arbitrario son muy escasas.– atzz
7 de diciembre de 2010 a las 12:12
Hasta donde yo sé, no hay ningún argumento que pueda convertir el intérprete de Python en un compilador de C. Pero puede usar python ctypes para ejecutar código C desde dlls o librerías compartidas.
– Mijail Churbanov
7 de diciembre de 2010 a las 12:20