2017-08-28 1 views
0

J'essaie de rediriger la sortie de mes scripts python vers pygmentize.Comment rediriger la sortie du programme par défaut?

Enregistrez- Je me suis fixé comme ceci:

"C:\Anaconda\python.exe" "%1"%* | pygmentize 

ne fonctionne pas (rien tuyauterie du tout), ce qui est faux?

+0

Le modèle de ligne de commande dans le registre est utilisé par 'ShellExecuteEx' pour construire la ligne de commande pour passer à' CreateProcess'. Il ne prend pas en charge les opérateurs shell classiques pour la redirection des E/S standard. Vous devez utiliser le shell CMD pour cela, par ex. "C: \ Windows \ System32 \ cmd.exe"/c "" C: \ Anaconda \ python.exe ""% 1 "% * |" chemin \ vers \ pygmentize.exe "" '. – eryksun

Répondre

1

Vous pouvez utiliser powershell pour cette

C:\ PowerShell -Command " python [yourprogram.py] | pygmentize -l py3t" 

-Command

Exécute les commandes spécifiées (et tous les paramètres) comme si elles ont été tapés à l'invite de commande Windows PowerShell, puis quitte, sauf si le paramètre NoExit est spécifié. Essentiellement, tout texte après -Command est envoyé en tant que ligne de commande unique à PowerShell (ceci est différent de la façon dont -File gère les paramètres envoyés à un script).

La valeur de Commande peut être "-", une chaîne. ou un bloc de script. Si la valeur de Commande est "-", le texte de la commande est lu à partir de l'entrée standard. Les blocs de script doivent être entourés d'accolades ({}). Vous pouvez spécifier un bloc de script uniquement lors de l'exécution de PowerShell.exe dans Windows PowerShell. Les résultats du script sont renvoyés au shell parent en tant qu'objets XML désérialisés, et non en tant qu'objets en direct.

Si la valeur de Command est une chaîne, Command doit être le dernier paramètre de la commande, car tous les caractères tapés après la commande sont interprétés comme les arguments de la commande. Pour écrire une chaîne qui exécute une commande Windows PowerShell, utilisez le format:

"& {<command>}"

où les guillemets indiquent une chaîne et l'opérateur Invoke (&) provoque la commande à exécuter.

La documentation ci-dessus pour Command se trouve here

+0

lieriez-vous de la documentation pour powershell pour cela s'il vous plaît? ou élaborer un peu, ne peut pas le faire fonctionner ... – Bob

+0

@Bob Je l'ai ajouté! –

+0

Les E/S standard de la tuyauterie dans PowerShell sont très différentes d'une coque typique. Il se positionne comme un intermédiaire qui décode en utilisant la page de codes actuelle, remplace les fins de ligne LF => CRLF, puis ré-encode pour écrire de l'autre côté du tuyau. PowerShell a besoin d'un opérateur pour un tuyau binaire classique. Jusque-là, j'utilise juste 'cmd/c'. – eryksun