Les cas d'utilisation les plus couramment exigent que les rapports d'erreur et d'exécution soient envoyés à l'administrateur système par courrier électronique.
Dans BASH, vous utiliseriez le tuyau Je cherche à appliquer le ce concept à FreePascal avec le Comment puis-je écrire la chaîne de rapport sur le courrier code> sous-processus p> J'ai trouvé les informations à pour expliquer la problématique des opérateurs i écrit un petit Perl em> script en tant que mailer Dummy: P> | code> tandis que dans:
TPROCESS Code> Classe. P>
https://wiki.freecal.org/executing_external_programs
Mais je ne décris pas exactement mon cas d'utilisation car il n'y a pas un premier processus p>
| code> ne fonctionne pas strong>
et option
shell = true code> (de python em>
subprocess.popen code>) non existant fort> tel que documenté à:
Remplacement des opérateurs de shell P> prms (cnt: '5'):
prm: '-s'
prm: 'Mail Command Test'
prm: 'user_login@localhost'
prm: '<'
prm: 'mail_message.txt'
message: ''
3 Réponses :
Studing the FreePascal em> Architecture J'ai compris que la fonctionnalité donc à depuis le Note: forte > Vous devez appeler réellement vous pouvez observer dans Le journal code> Strace Code> que le La sortie du programme Mail_pipe est la suivante: p> Il s'agit d'une sortie normale et attendue depuis En conséquence, vous obtenez un email dans votre boîte aux lettres locale forte>: p>: p> | code> est implémentée avec
TProcess.input code> propriété qui est en effet un
TOUTUDPIPIPESTREAM . /p>Le
TOUTUTPIPIPESTREAM code> est la mise en œuvre oborientée du tuyau
de code> code>
https://www.freecal.org/docs-html/fcl/ TOUCHES / TOUTUTPIPITESTREAM.HTML P>
TOUTUTPIPIPESTREAM code> est créé par le
CreateEpipeStreams code> appel à
représentent l'extrémité d'écriture d'un tuyau. C'est un
ttream code> descendant qui
ne permet pas la lecture. p>
blockquote>
ttream code> Objets que vous pouvez écrire avec le
tstream.write () code> fonction. p>
Echo Code> Commande dans
BASH CODE> imprime simplement un texte que je suis simplement remplacé par un
TStringStream code> qui pousse de manière dynamique et donne des résultats dans une chaîne code> Pascal code>. Cela vient utile pour la génération de rapports progressifs. La chaîne
code> résultante code> Vous pouvez l'utiliser directement et l'écrire dans le flux
tprocess.input code>. P>
tprocess.execute code> avant de pouvoir écrire dans le flux d'entrée car il s'agit du moment où le système
Fork () code> L'appel se produit et le tuyau
est ouvert.
Mais encore le tprocess code> n'est pas en cours d'exécution car il attend toujours pour la entrée
stdin code>. P>
TPROCESS CODE> crée des pipes, la recherche de la commande code> code> et les fourche-dessus du processus principal: p> xxx pré>
Mail code> donnerait une sortie si elle a échoué. Plus de détails sur le traitement par e-mail Vous pouvez trouver dans votre
maillog local code>. P>
strace: Process 24911 attached restart_syscall(<...
resuming interrupted nanosleep ...>) = 0 mmap(NULL, 32768,
PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) =
0x7ff970770000 pipe([3, 4]) = 0 pipe([5,
6]) = 0 access("noexec_script.pl", F_OK)
= 0 fork() = 27068 close(4) = 0
--- SIGCHLD {si_signo=SIGCHLD, si_code=CLD_EXITED, si_pid=27068, si_uid=1000, si_status=127, si_utime=0, si_stime=0} --- close(5)
= 0 write(1, "Mail Input: Writing ...\n", 24) = 24 write(1, "Mail Input (Length '9'):\n", 25) = 25 write(1, "'test mail'\n", 12)
= 12 write(6, "test mail", 9) = -1 EPIPE (Broken pipe)
--- SIGPIPE {si_signo=SIGPIPE, si_code=SI_USER, si_pid=24911, si_uid=1000} ---
+++ killed by SIGPIPE +++
Vous pouvez peut-être éviter d'écrire directement sur tuyau directement, mais résoudre votre problème en écrivant vos données sur Autant que je sache, les tuyaux sont créés en dehors de votre application et redirigent la sortie de votre programme vers l'entrée d'un autre programme Une autre alternative peut être de parler directement au serveur de messagerie pour envoyer un courrier électronique et je suppose qu'il y a des unités pour le faire ... P> MSGFILE CODE>, puis exécutez Exec avec la redirection d'entrée -
Envoyer
A | b code> doit être identique que
a> fichier && b
envoyer
Merci pour votre participation. Oui, quand un programmeur Linux pense à la tâche, la première pensée est celle de rediriger l'entrée et la sortie, car elle fonctionne principalement dans toutes les langues de script principales Bash i>, python i> et < I> Perl I>. Mais à la documentation officielle wiki.freecal.org/... Il est clairement expliqué que la classe tprocess code> est pas b> a coquille Bash i> et ne fonctionnera donc pas comme ceci. Mais je suis toujours intrigué pour voir votre prototype comment vous réalisez pour faire ce travail.
La commande coquille i> la commande i> commande & code> signifie de cette manière pour exécuter la commande de manière détachée que la COMANK ne bloque pas le terminal. Exemple $ Echo "Hello World" & Code> Le résultat est le pid i> du processus détaché:
[1] 29152 code>
Désolé, cet ampersand était ma tentative de wite
Peut-être que vous pouvez simplement utiliser quelque chose comme
S'il vous plaît, regardez mes exemples que j'ai ajoutés à la question pour démontrer la question de bien comprendre la problématique
Cher corps, vous pouvez vérifier qu'il n'y a pas d'espaces entre
exécuté ('envoyer
<< / code> et nom de fichier. Cheers Robby
Voici deux programmes communiquant via des fichiers. Deuxièmement, on commence la première via bash et redirige sa saisie au fichier créé précédemment:
program pr; var s : string; begin readln (s); writeln (s) end. program test; uses process; var f : text; s : ansistring; begin assign (f,'text'); rewrite (f); writeln (f,'content'); close (f); runcommand ('/bin/bash',['./pr <text'],s) end.
Merci pour votre temps et vos efforts que vous avez mis dans ce numéro. Votre solution pourrait réellement compiler et également fonctionner. Mais à part ne pas être une solution idiomatique et plutôt un bash code> écrit dans Pascal i> Il a plusieurs problèmes. 1) b> Il ne peut pas gérer plus de 256 octets b> 2) b> Il introduit le aérien b> de lancement d'un autre processus qui est la
BASH Shell Code> 3) B> La taille de la mémoire tampon est également limitée à 256 octets b>
Bonjour Bodo, c'était juste l'échantillon pour démontrer le concept. Je suppose que l'entrée de la boîte à lettres est comprise entre 256 caractères par ligne, si vous avez besoin de davantage, vous pouvez créer un fichier avec type de données personnalisé et lire / écrire avec juste une seule lecture / écriture. Idomaticaly Parler - Le fichier émule du fichier, vous pouvez exécuter le courrier inséré de bash et vous pouvez écrire Whatewer que vous souhaitez déposer (non limité à 256 octets). À partir de frais généraux, si vous souhaitez utiliser des pipes (Soluton travaillant uniquement sur UNIX-ES et non Windoze), vous aurez déjà le processus de messagerie tout le temps de l'autre extrémité de la pipe.
Si je comprends votre question, vous pouvez utiliser
lishnn code> et tuyer les données sur votre programme.