2016-06-13 15 views
0

Der Versuch, einige Befehle über Perl auszuführen. Einer der Befehle erfordert, die Eingabetaste in der Mitte zu drücken, um zu vervollständigen! Ich habe zuerst versucht mit Java, aber versäumt, dies zu tun, ich dachte, es ist in Perl möglich, aber nicht durchkommen!CMD-Operationen durch Perl

$dir = "C:\\bip_autochain\\scripts"; 
chdir($dir) or die("Can't change to dir \n"); 

system("lcm_cli.bat -lcmproperty C:\\pl\\LCMBiar_Import.property"); 

sleep(5); 
system("\n"); 

Der hervorgehobene Systembefehl muss nach einiger Zeit, sagen wir 5 Sekunden, die Eingabetaste drücken. Mein Code dient nicht diesem Zweck.

+0

versuchen, "System (qq {start/b" "" lcm_cli.bat -lcmproperty C: \\ \\ LCMBiar_Import.property "});" – malyy

Antwort

1

Wenn Sie Daten von Ihrem Perl-Skript an einen Befehl senden möchten, der in einem Subprozess gestartet wurde, müssen Sie beim Starten ein Programm in das Programm leiten. Dann warten Sie die erforderliche Zeit und senden Sie die Daten mit print (oder printf).

Es gibt eine große Einschränkung. Wenn das externe Programm das Konsolen-Terminal direkt zur Eingabe öffnet und nicht von stdin liest (d. H. Um ein Passwort anzufordern), können Sie die Daten möglicherweise nicht an das Programm senden.

Für den Standard-Fall, in dem das Programm von stdin liest:

$dir = "C:\\bip_autochain\\scripts"; 
chdir($dir) or die("Can't change to dir \n"); 

open(CMD, "|lcm_cli.bat -lcmproperty C:\\pl\\LCMBiar_Import.property"); 
#  ^
#   vertical bar, aka "pipe" symbol 

sleep(5); 
print CMD "\n"; 
... 
close(CMD); -- when you are done sending data 

Das Rohr Symbol am Anfang des Befehls ist eine spezielle Form der open dass der CMD Dateihandle stdin auf den Befehl des verrohrt einrichtet. Dies wird beschrieben in the documentation

+0

Danke für die Tippfehler Cleanup @MathiasRJensen –

+0

hey, habe ich versucht, aber es scheint nicht zu funktionieren. Wenn ich den Befehl direkt an der Eingabeaufforderung ausführe, wartet er 5 Sekunden und fragt dann nach dem Passwort! Es geht weiter, wenn ich Enter drücke. Ich muss dieses Szenario nachahmen –

+1

Es ist sehr wahrscheinlich, dass das Programm direkt von der Konsole liest. Unter Linux kann es möglich sein, auf die Konsole zu schreiben, aber unter Windows kann es passieren, dass Sie kein Glück haben. Dies ist jetzt Windows-API-spezifisch. Es könnte helfen, uns zu sagen, welche Perl-Distribution Sie verwenden (Cygwin, ActiveState, etwas anderes?) –

Verwandte Themen