2016-04-20 10 views
-1

Ich arbeite derzeit an einem Projekt, das eine C-Quelldatei verwendet, die mit einer Python-Datei interagieren muss (führen Sie die Datei und Capture-Ausgabe) und ich bin nicht genau sicher TU es. derzeit die Python-Datei wird über den Anschluss (Linux) läuft mit:Ausführen einer Datei mit Argumenten aus Python eingebettet in c

python file arg1 arg2 arg3 arg4 

und ich einbetten Python in den C-Code versuchen nur die Datei ausführen erstes (keine Ausgabe Capture) mit dem folgenden Code:

void python() { 
    FILE * file; 
    int argc; 
    char * argv[5]; 

    argc=5; 
    argv[0]="pathtofile/file"; 
    argv[1]="arg1"; 
    argv[2]="arg2"; 
    argv[3]="arg3"; 
    argv[4]="arg4"; 
    Py_SetProgramName(argv[0]); 
    Py_Initialize(); 
    PySys_SetArgv(argc,argv); 
    file= fopen("pathtofile/file","r"); 
    PyRun_SimpleFile(file,"pathtofile/file"); 
    PyFinalize(); 
} 

args1-2 sind fest codiert, und args3-4 wird durch den C-Code bestimmt (bestimmt nur ganzzahlige Werte), dieser wird dann an die Python-Datei übergeben, wo er dann ausgeführt wird.

Wenn Sie den obigen Code ausgeführt wird erhalte ich ein: Typeerror: nicht unterstützte Operandtyp (e) für +: NoneType und ‚str‘

Irgendwelche Tipps von hier auf das, was mein Problem sein könnte, wird sehr geschätzt.

EDIT: Ich war mit dieser als Leitfaden, wie es ähnlich zu sein scheint, was im Versuch Run a python script with arguments

+0

Ihr Code ist nicht einmal in der Nähe zu kompilieren! –

+0

Ok, 'PyFinalize' ->' Py_Finalize' und dann ist das Problem scheinbar in Ihrem ** Python ** Code, daher würden Sie lesen wollen [Wie man ein minimales, vollständiges und überprüfbares Beispiel erstellt] (http://stackoverflow.com/help/mcve) –

Antwort

1

Sie acheive argc ist nicht initialisierten - haben Sie mit Warnungen kompilieren aktiviert und Warnungen in Fehler (-Wall, -Werror auf GCC?); und Ihre argv ist nicht ordnungsgemäß nullterminiert. Daher hat Ihr Code undefined Verhalten. Alles kann passieren, einschließlich demons flying out of your nose. Das Argument mode muss ein String sein, aber Sie übergeben eine int (Zeichenkonstante) - die eine andere UB hat.

So zumindest Sie muss tun:

int argc = 5; 
char *argv[] = { 
    "pathtofile/file", 
    "arg1", 
    "arg2", 
    "arg3", 
    "arg4", 
    0 
}; 
input = fopen(..., "r"); // "r", not 'r'! 

Zusätzlich sind Sie nicht die Rückgabewerte von jeder dieser Funktionen zu überprüfen. Jede von ihnen kann fehlschlagen und mit Python sollten Sie erwarten, dass sie fehlschlagen - einschließlich Ihrer ! (Bitte sagen Sie, dass sie aus Platzgründen weggelassen wurden).

+0

danke für die schnelle Antwort, ich sollte erwähnt werden, dass ich sehr neu zu Python bin, so jetzt, dass ich eine Richtung habe, kann ich versuchen, von hier fortzufahren – EthanW05

+0

Die Fehler in Ihrer Frage waren etwa ** C **. –

+0

Auch relativ neu in C, Dies war die erste Frage, die ich gestellt habe, also vergib mir, dass ich nicht so direkt bin, wie ich hätte sein sollen. – EthanW05

Verwandte Themen