0
votes

Comment exécuter une application basée sur la ligne de commande et un texte de saisie?

J'ai un programme appelé iDrag.exe qui est entièrement basé sur la ligne de commande. Il faut un minimum de 2 entrées avec des citations autour de chacun, "INPUT.IN" et "OUTPUT.OPT" des deux sont exécutés par eux-mêmes. Input.in est un fichier créé précédemment et de sortie.out est un fichier que le programme écrit. Comment puis-je ouvrir ce programme, tapez "" INPUT.IN "" Appuyez sur Entrée, tapez "" Sortie.out "" et appuyez sur Entrée? Je peux ouvrir le programme via OS.System, mais je n'ai pas réussi à obtenir le sous-processus de fonctionner correctement.

Un gros problème, j'ai la possibilité de taper une fois que idrag.exe est ouvert. Je sais que je peux faire un fichier .bat avec une liste de commandes, mais je ne sais pas les commandes, je saisis du texte. P>

EDIT: P>

pour les personnes intéressées Voici le lien de téléchargement direct .exe . Voici un Lien vers un exemple de fichier d'entrée p>

EDIT 2: P>

Habituellement I Exécutez idrag.exe, tapez "" INPUT.IN "" Appuyez sur Entrée, tapez "" Sortie.out "" Hit Entrée et IDRAG calcule ses trucs et Écrit la sortie.out dans le répertoire actuel. P>

EDIT 3 (cela pourrait être excessif): p>

Voici un site Web compilant un tas de codes, vous pouvez Ctrl + F pour trouver la section IDRAGS. Il comprend tous les 3 codes Fortran, l'exécutable et un tas d'échantillons de fichiers dans / arrière. en aucun cas, ne vous attendez pas à ce que quiconque réussisse à tout traverser et essayez-le, mais c'est ici que vous n'êtes pas ennuyé. P>

mise à jour finale / solution forte> p>

woohoo, nous l'avons fait tout le monde. Il y a une API pour faire des choses comme ça facile! C'est ce qu'on appelle PEXPPECT. P>

from pexpect import popen_spawn


process = popen_spawn.PopenSpawn('idrag.exe')
process.sendline("'test1.in'")
process.sendline("'test1.out'")


2 commentaires

N'est pas possible de passer à la fois les cordes comme arguments de ligne de commande séparés par l'espace?


Vient d'essayer cela, Idrag.exe est ouvert dans CMD mais les noms de fichiers ne sont pas entrés.


5 Réponses :


0
votes

Essayez: xxx

saisissez la ligne de commande tout à la fois.


12 commentaires

J'ai essayé à travers un fichier de commandes et à travers la ligne CMD, il a élevé Idrag.exe, mais rien n'a été exécuté.


Idrag.exe est un programme que vous avez écrit? Je n'en ai jamais entendu parler.


Avez-vous vérifié le dossier après avoir exécuté le programme pour voir si quelque chose a été généré?


Non, c'est un vieux code fortrain qui peut maintenant être exécuté comme .exe. Il a été écrit par un professeur à Virginia Tech pour analyser la traînée sur une aile.


J'ai vérifié le dossier, pas de changement. Généralement, le programme écrit simplement sur le dossier (tant que le drapeau a été vérifié pour écrire dans un fichier).


Décrivez comment vous le faites habituellement de travail - Modifiez la question pour en faire un peu plus claire ce que vous savez faire et ce que vous ne faites pas.


Pouvez-vous voir le code FORTRAN ou avez-vous seulement une compilée ?exe?


Habituellement, je gère idrag.exe, tapez "" INPUT.IN "" Appuyez sur Entrée, tapez "" Sortie.out "" Appuyez sur Entrée et IDRAG calcule ses trucs et écrit la sortie.out dans le répertoire actuel. J'ai accès au code Fortran, mais je ne connais aucun Fortran Haha.


Mais quelqu'un sur tellement pourrait savoir Fortran;)


J'ai édité le post, encore une fois et inclus où ces fichiers peuvent être trouvés. J'apprécie votre aide une tonne!


N'hésitez pas à uppoter tout ce qui vous est utile, même si ce n'est pas tout à fait la réponse dont vous avez besoin;)


Oui! J'ai trop faible d'un représentant pour les votes pour changer le score publiquement affiché lol



0
votes

Comme d'autres personnes ont dit, si "Input.in" et "Output.out" ne changent pas, vous pouvez simplement faire:

in_ = input("Enter input file name")
out_ = input("Enter output file name")

os.system(f'idrag.exe {in_} {out_}')


1 commentaires

Cela ouvre le programme dans la ligne CMD, mais les noms de fichiers ne sont pas exécutés.



0
votes

ESSAYER

os.system("idrag.exe < 'input.in' < 'output.out'")


2 commentaires

C'est un peu de travail! Deux problèmes cependant: premièrement, je ne peux pas saisir le fichier de sortie.out car cmd dit que le fichier ne peut pas être trouvé (il n'a pas encore été écrit). Deuxièmement: je reçois une erreur que je n'ai jamais vue auparavant. FORRTL: grave (43): erreur de spécification de nom de fichier, unité 10, fichier C: \ JOIMYDirectoryIS. Un tas de trucs d'image de manière incrémentielle - Corrélation PC désactivée.


Bien fait, semble que vous le gérez. Je suis intéressé si ma solution aurait travaillé avec des guillemets simples autour de "INPUT.IN" et "OUTPUTLET" ...



0
votes

Puisque je ne veux pas télécharger un fichier EXE, je vais essayer de simuler ledit exe avec un fichier de parquet Windows qui demande à deux chaînes d'être saisis.

donné "idrag.bat" comme p >

from subprocess import Popen, PIPE

process = Popen(["idrag.bat"], stdin=PIPE, stdout=PIPE, text=True)
print(process.communicate(input='foo.txt\nbar.txt\n')[0])


3 commentaires

J'apprécie grandement cela, je suis cependant légèrement confus ... j'ai changé foo.txt et bar.txt à leurs noms respectifs sur ma machine, mais où vais-je partir de là? Où devrais-je exécuter idrag.exe?


Il suffit de remplacer l'appel: Poping Popen (["idrag.exe"], stdin = tuyau, stdout = tuyau, texte = true) . Je ne voulais pas télécharger votre .exe .exe


Ohhhhhhhhhhhhhhh je pense que le monde a du sens maintenant. Je comprends ce que tu dis maintenant. Le processus n'a pas vraiment fonctionné, mais il n'y avait pas d'erreurs, c'est donc une victoire? Incertain, j'ai trouvé une solution cependant. Merci!!



0
votes

Il y a une API pour faire des choses comme ça faciles! C'est ce qu'on appelle PEXPPECT.

from pexpect import popen_spawn


process = popen_spawn.PopenSpawn('idrag.exe')
process.sendline("'test1.in'")
process.sendline("'test1.out'")


0 commentaires