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.
Das klingt etwas wie ein [XY-Problem] (http://meta.stackexchange.com/questions/66377/what-is-the-xy-problem). –
Vielleicht ... aber bevor ihr dies markiert, bitte irgendjemand irgendwelche Hinweise? Ich würde es sehr zu schätzen wissen. –
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. –