2016-12-01 6 views
2

Ich lese ähnliche Beiträge, aber nichts Besonderes zu diesem Thema. Oder vielleicht ist meine Logik falsch und du kannst mich bitte korrigieren.Aufrufen eines C/C++ - Codes aus Python mit einem Argument

Was ich versuche zu tun: Code

schreiben Python, dass dann ruft eine bereits kompilierte C oder C++ Code. Aber wie würde ich ein Argument an dieses C/C++ - Skript übergeben, da es bereits kompiliert wurde?

Ich habe ein Programm in Python, das eine Excel-Datei bearbeitet. Und irgendwann muss ich ein Array von 10.000 Zellen durchsuchen, anhängen und erstellen. Ich dachte, C/C++ würde das schneller machen, da Python dafür etwas Zeit benötigt.

Hilfe bitte.

+0

Das klingt etwas wie ein [XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –

+0

Vielleicht ... aber bevor ihr dies markiert, bitte irgendjemand irgendwelche Hinweise? Ich würde es sehr zu schätzen wissen. –

+2

Nein, nein. Sie haben meinen Standpunkt falsch verstanden. Ich sage nicht, dass Ihre Frage angezeigt werden sollte. Ich sage nur, dass Sie danach fragen sollten, wie Sie Ihr Problem lösen können und nicht, wie Sie Ihre Lösung beheben können. –

Antwort

2

Lassen Sie uns sagen, dass wir ein Python-Skript schreiben wollen, das als Wrapper wirkt auf einem C binären und übergibt Argumente vom Terminal an den C binär. Erstellen Sie zunächst ein test.c C-Programm wie folgt:

#include <stdio.h> 

int main(int argc, char *argv[]) 
{ 
    if(argc > 1) 
    { 
     int i; 
     printf("C binary: "); 
     for(i = 0; i < argc; i++) 
     printf("%s ", argv[i]); 
     printf("\n"); 
    } 
    else 
     printf("%s: No argument is provided!\n", argv[0]); 
    return(0); 
} 

dann kompilieren mit:

gcc -o test test.c 

und es für zwei Dummy-Argumente laufen mit:

./test arg1 arg2 

Jetzt geht zurück auf Ihre Frage. Wie ich Argumente von Python an eine C-Binärdatei übergeben könnte. Zuerst benötigen Sie ein Python-Skript, um die Argumente vom Terminal zu lesen. Die test.py würde das für Sie tun:

import os 
import sys 

argc = len(sys.argv) 
argv = sys.argv 

if argc > 2: 
    cmd = './' 
    for i in range(1,argc): 
     cmd = cmd + argv[i] + ' ' 
    if os.path.isfile(argv[1]): 
     print('Python script: ', cmd) 
     os.system(cmd) 
    else: 
     print('Binary file does not exist') 
     bin = 'gcc -o ' + argv[1] + ' '+ argv[1] + '.c' 
     print(bin) 
     os.system(bin) 
     if os.path.isfile(argv[1]): 
     os.system(cmd) 
     else: 
     print('Binary source does not exist') 
     exit(0) 
else: 
    print('USAGE: python3.4', argv[0], " BINARY_FILE INPUT_ARGS"); 
    exit(0) 

test.c und test.py im gleichen Verzeichnis zu haben. Jetzt können Sie Argumente vom Terminal an den test C binär passieren mit:

python3.4 test.py test arg1 arg2 

Schließlich wäre der Ausgang sein:

Python script: ./test arg1 arg2 
C binary: ./test arg1 arg2 

Zwei letzte Bemerkungen:

  • Auch wenn Sie kompilieren Sie den Quellcode nicht, der test.py sucht nach der test.c Quelldatei und versucht, sie zu kompilieren.
  • Wenn Sie keine Argumente vom Terminal übergeben möchten, können Sie die Argumente im Python-Skript immer definieren und an die C-Binärdatei übergeben.
Verwandte Themen