2016-06-13 13 views
0

perlでいくつかのコマンドを実行しようとしています。コマンドの1つは、完了するためにEnterキーを中央に押す必要があります。 私は最初にjavaで試していましたが、失敗したので、perlでも可能だと思っていましたが、やり遂げられませんでした!PerlによるCMD操作

$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"); 

強調表示されたシステムコマンドでは、5秒という時間が経過してからEnterキーを押す必要があります。 私のコードはこの目的には役立ちません。

+0

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

答えて

1

Perlスクリプトからサブプロセスで起動されたコマンドにデータを送信する場合は、起動時にファイルハンドルをプログラムにパイプする必要があります。次に、必要な時間だけ待って、print(またはprintf)を使用してデータを送信します。

巨大な警告が1つあります。外部プログラムがコンソール端末を入力用に直接開き、stdinから読み取らない(パスワードを要求する)場合、プログラムにデータを送信できないことがあります。

プログラムは標準入力から読み込み、標準的なケースの場合:

$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 

コマンドの先頭にパイプ記号はCMDファイルハンドルは、コマンドのstdinにパイプ設定openの特殊な形式です。これはdescibedですin the documentation

+0

typoクリーンアップありがとう@MathiasRJensen –

+0

ちょっと、私はこれを試みたが、動作していないようです。コマンドプロンプトで直接コマンドを実行すると、5秒待ってからパスワードを尋ねます!私がenterを押すとさらに進んでいく。このシナリオを模倣する必要があります –

+1

プログラムがコンソールから直接読み込んでいる可能性があります。 Linuxではコンソールに書き込むことは可能かもしれませんが、Windowsでは運が悪いかもしれません。これはWindows API固有のものです。使用しているPerlディストリビューション(Cygwin、ActiveState、その他のもの)を教えてください。 –

関連する問題