Transmettre le devis dans l'application Exécuter le programmeJ'ai un script JMP qui appelle Run Program, et dans les paramètres, je dois passer une chaîne JSON, mais Run Program semble supprimer les guillemets dans les champs Options.
Par exemple:
my_str = ["key" => 32423]
json = As JSON Expr(my_str)
Run Program(
Executable("/path/to/myexe"),
Options({
json
}),
Read Function( "text")
);
Je ne peux pas obtenir mon exécutable pour voir une citation dans le premier paramètre. Chaque fois qu'il est supprimé, myexe ne peut pas analyser le JSON car la propriété key n'est pas entourée de guillemets.
Re : Transmettre le devis dans l'application Exécuter le programmeAccueillir!
Je ne sais pas si RunProgram est limité de la même manière que cmd.exe, mais https://support.microsoft.com/en-us/help/830473/command-prompt-cmd-exe-command-line-string-limitation suggère qu'il y a une limite de 8K aux données qui peuvent être transmises de cette façon.
Si vous avez besoin de transmettre plus de données, vous pouvez faire en sorte que RunProgram connecte le stdin et le stdout de votre programme à RunProgram ReadFunction et WriteFunction. Les problèmes d'échappement de la ligne de commande disparaissent, mais le JSL devient plus compliqué, donc si vous n'avez que de petites chaînes de json, conservez peut-être votre solution actuelle. (Et l'utilisation de stdin/stdout suppose que votre programme fonctionne de cette façon.)
RunProgram n'a pas de logique pour essayer de comprendre comment échapper les caractères spéciaux dans les arguments de la ligne de commande. L'utilisation de la boîte dos noire (anciennement) est un bon moyen de déterminer ce que nécessite dos/cmd.exe. Si vos données contiennent des blancs intégrés, la situation s'aggrave.
Re : Transmettre le devis dans l'application Exécuter le programmeMerci, ça a marché ! J'apprécie ton aide.
Ce serait bien sûr bien si JSON était plus facile à utiliser dans les scripts JMP. La solution de remplacement semble un peu "hacky" étant donné que l'utilisation de JSON est très courante dans les E/S de données.Re : Transmettre le devis dans l'application Exécuter le programmeL'échappement dans le journal JMP est déroutant, le programme voit ce que vous espérez. Essayez cette instruction d'écriture pour faire disparaître l'échappement dans le journal :
my_str = ["key" => 32423];
json = As JSON Expr(my_str);
quote="\!"";
escapedquote = "\!\\!"";
txt = runprogram(executable("ping"),
options({substitute(json,quote,escapedquote)}),
readfunction("text"));
write(txt);
La requête ping n'a pas pu trouver l'hôte {"key":32423}. S'il vous plaît vérifier le nom et essayez à nouveau.
Re : Transmettre le devis dans l'application Exécuter le programmeMerci pour la réponse rapide. Étant donné que le programme appelé ne connaît pas JMP et ses codes d'échappement, comment pourrions-nous faire passer une citation plutôt que la citation échappée JMP ?
Par exemple, je voudrais que l'application voie {"key":32323}, et non {\!"key\!":32323}Re : Transmettre le devis dans l'application Exécuter le programmeVoici mon attaque sur le problème; J'ai utilisé la commande dos ping car elle a renvoyé un joli message :
The second command escapes the quotation marksLa deuxième commande échappe les guillemets
Je pense que vous pouvez le faire dans JMP comme ceci:
my_str = ["key" => 32423];
json = As JSON Expr(my_str);
quote="\!"";
escapedquote = "\!\\!"";
runprogram(executable("ping"),
options({substitute(json,quote,escapedquote)}),
readfunction("text"));
"La requête ping n'a pas pu trouver l'hôte {\!"key\!":32423}. S'il vous plaît vérifier le nom et essayez à nouveau.
"