J'ai donc un programme Python qui trouve des annuaires de fichiers .txt, puis de transmettre ces annuaires comme une liste (je crois) à mon programme C ++. Le problème que j'ai, c'est que je ne suis pas sûr de passer la liste à C ++ correctement. J'ai utilisé: où Mes arguments Mon code C ++ accepte les suivants: P> file_list code> est le
[] code> des répertoires de fichiers txt. P>
int main (int argc, string argv[])
4 Réponses :
Je posterai cette solution alternative car elle fonctionnerait également pour d'autres listes longues de chaînes qui devaient être transmises.
dans votre script code> python code> Créez un fichier texte (je vais appeler Il "Masterfile") et écrivez les chemins de fichiers sur le fichier Masterfile. Vous pouvez donner à chaque chemin de fichier une ligne séparée. Passez ensuite le chemin de fichier du fichier Masterfile vers votre programme Vous pouvez utiliser quelque chose comme En outre, vous avez mentionné dans les commentaires que vous devez effectuer différentes tâches dépendant de différents chemins de fichiers. : Une suggestion serait d'ajouter un caractère au début de chaque ligne dans le fichier Masterfile pour signaler ce qui doit être effectué pour le fichier particulier. Exemple: P> C ++ code>. De cette façon, vous n'avez pas à vous soucier de la longueur de vos arguments de ligne de commande. Laissez votre programme
C ++ code> Ouvrir et lire le fichier de traitement. P>
os.remove () code> pour se débarrasser du fichier Masterfile Votre script
python code> une fois que le programme
C ++ code> est terminé. p>
a Random/path/aFile.txt # a could mean do task 1
b Random2/path2/differentFile.c # b could mean do task 2
Merci. Je pense que c'est ce que je finirai par faire. (Semble être moins mal à la tête) J'apprécie que vous preniez le temps de répondre à cela. De plus, je ne peux pas voter votre réponse parce que je suis une réputation de cinq ans ... Si vous pouviez uppoter de la mienne, je pouvais uppouver le vôtre heh.
@ Jnorris4118 Dans ce cas, vous devez marquer la réponse de Andrew comme correcte afin que cette question soit "résolue".
Désolé ... je viens de découvrir ... heh
Vous passez une liste à Subprocess.Call code>.
Subprocess.Call CODE> Convertit ceci en ce qui est nécessaire pour le système (qui peut varier, mais il n'est certainement pas une liste de python). Le système organise ensuite cela pour que cela soit copié quelque part dans le nouveau processus et définit les arguments standard sur
principal code>, qui sont
int, char * ** code>. Dans votre programme C ++, vous devez définir
principal code> comme
int Main (int Argc, char * ** argv) code>; rien d'autre ne marchera. (Au moins ... un système pourrait supporter
int [STD :: String Const &) CODE> ou d'une autre comme une extension. Mais je n'ai jamais entendu parler d'un qui l'a fait.) P>
"transmettre une liste via Python à C ++" em> p>
Une autre approche serait d'utiliser
Boost.python code> em>
, cela peut ne pas répondre directement à votre question, mais sa peine d'être soulignée une autre solution. P>import get_dir_list import os get_dir_list.get_dir_list(os.listdir('.'))
Une autre option consiste à utiliser Supposons que vous ayez les fichiers suivants: P> CyTHON_FILE.CPP
python_file.py
setup.py
Sum_MY_Vector.cppp
sum_my_vector.h p> cyron_file.pyx strong> p> < Pré> xxx pré> sum_my_vector.cpp strand> p> sum_my_vector.h strong> p> p> < Pré> xxx pré> python_file.py strong> p> exécuté maintenant p> et vous pouvez exécuter le fichier python p> Cyron code> (pas une réponse directe). Voici un exemple complet complet:
PYTHON SETUP. py build_ext --Enface code> p>
Merci d'avoir aidé à éditer Stuff Ashoka ... c'est mon premier post de tous les temps.
Je ne sais pas comment répondre à votre question sur la transmission de la liste - toutefois, une option alternative si vous ne pouvez pas le faire fonctionner serait d'écrire les chemins de fichiers dans un fichier temporaire, puis transmettez le chemin du fichier temporel à votre C ++. programme comme une chaîne.
C'est une solution assez facile, mais j'essaie de le garder plus contenue de sorte que je n'ai pas de fichiers texte flottant ... y a-t-il un moyen de supprimer ce fichier temporaire à Python après avoir fini de l'utiliser à Python?
Je ne sais pas d'utiliser
sous-processus.Call code> (quelle est votre question), mais j'ai trouvé qu'utiliser
Cyron code> pour quelque chose comme ceci est assez simple.
Vous devriez être capable de le supprimer dans votre
python code> script ou
C ++ code>, recherchez simplement la commande, devrait être assez simple.
Une partie de la question serait le nombre de fichiers que vous envisagez d'être envoyé à cette application? Vous devez également garder la longueur de la commande de ligne de commande à l'esprit. Cela doit également fonctionner dans un environnement code> Windows CODE> et que si le chemin du nom de fichier a une place dedans? Comment détermineriez-vous cet espace potentiel qui peut faire 1 chemin de fichier ressembler à 2 chemins de fichier différents?
Environ 150 fichiers, dans Windows EnvR, et j'ai besoin de l'espace entre chaque répertoire, car j'utilise chacun de chacun sur une base séparée via mon programme C ++
Ne devrait-il pas être
int Main (int argc, char * argv []) code>?
Je suis content que tu l'as apporté ça. Cela fait également partie de ma question. Si je passe dans une liste, comment cela équivaut-il à une liste dans Python? Est-ce juste un pointeur ou s'il devrait être une chaîne []? Si j'utilise la chaîne, je peux réellement voir une sortie, s'il s'agit d'un char * argv [] alors je ne peux pas.