2011-03-17 4 views
0

J'utilise perl pour ouvrir un tube sur pgnuplot.exe afin de générer des commandes de traçage. Par exemple,Comment faire pour arrêter la fenêtre gnuplot pop-up lors de l'utilisation de la ligne de commande dans Windows?

open ($PLOT, "|pgnuplot") or die "error: gnuplot not found!"; 

print $PLOT <<EOPLOT; 

set term postscript eps enhanced "Arial" 20 
set output "somefile.eps" 

## do some plotting here ## 

EOPLOT 

close $PLOT; 

je remarque qu'une fenêtre pour gnuplot apparaît toujours et saisit la mise au point de ma souris et le clavier momentanément. Cela rend difficile l'utilisation de l'ordinateur pendant l'exécution du script d'intrigue.

Est-il possible d'empêcher pgnuplot d'ouvrir une fenêtre?

Répondre

0

Oui, lors du démarrage d'un programme sous Windows (CreateProcess API), il est possible de demander que la fenêtre principale soit masquée ou réduite sans mise au point (parmi d'autres options). Mais je ne sais pas si perl fournit un moyen facile de le faire.

Vous pouvez utiliser batch operation à la place (placez vos commandes plot dans un fichier, puis passez le nom du fichier à gnuplot).

+0

Je viens essayé d'écrire des commandes dans un fichier et d'appeler l'opération de traitement par lots de perl. L'effet est que la fenêtre s'ouvre maintenant pour un temps beaucoup plus court mais elle attrape toujours le clavier et la souris. Par conséquent, je ne peux pas taper en cours d'exécution du script de traçage en arrière-plan. – devil

+0

@devil: Avez-vous essayé d'utiliser 'wgnuplot' au lieu de' pgnuplot' pour le traitement par lots? 'pgnuplot' est destiné à être utilisé à partir d'autres programmes de console, et réutilisera la fenêtre de console existante. Si votre application n'est pas en mode console, 'pgnuplot' va créer une nouvelle console, utilisez plutôt' wgnuplot'. –

+0

J'ai changé pgnuplot en wgnuplot, pas de différence de comportement. J'appelle perl de MSYS en utilisant un script bash. Je ne sais pas si cela compte. – devil

0

Vous pouvez empêcher montrant les fenêtres de console enfant via le module Win32:

use Win32; 
Win32::SetChildShowWindow(0); 
Questions connexes