簡體   English   中英

在 python 中執行 C 程序?

[英]Executing a C program in python?

我有這個 C 程序,至少我認為它是(文件:spa.c、spa.h)。 有什么方法可以從 Python 執行這個腳本而不將額外的參數傳遞給 Python 解釋器(如果沒有,參數是什么?)

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

(請不要被 url 中的“注冊”嚇到,如果您填寫表格,您可以立即下載文件(沒有驗證郵件等)我會嘗試您的建議並報告結果。

更新 2 :我使用 gcc 編譯了源代碼,但現在它在嘗試調用()時給了我一個被拒絕的權限,即使在以 root 身份運行 python 時也是如此(我在 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

謝謝大家!

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

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)

C 不是腳本語言。 您必須將 spa.c 編譯為可執行文件。 你不說你的操作系統,但如果是 Mac 或 Linux,試試

  gcc spa.c -o spa

如果可行,您現在就有了一個名為 spa 的可執行文件。 您可以使用 python 的os.system()來調用它。

這是源代碼。 你必須在做任何事情之前編譯它。 它不是可執行的。

沒有編譯 C 程序所需的 C腳本之類的東西……如果編譯為可執行文件,則可以使用os.system(CommandLine)執行它

問題老了還是覺得少了一個重要的部分!

C 代碼可以在 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

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM