通过Perl进行CMD操作

时间:2016-06-13 08:07:46

标签: perl

尝试通过perl运行一些命令。其中一个命令需要在中间按Enter键才能完成! 我是第一次尝试使用java但没有这样做我认为它可能在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");

突出显示的系统命令需要在一段时间后按5秒后按Enter键。 我的代码不能用于此目的。

1 个答案:

答案 0 :(得分:1)

如果要将数据从Perl脚本发送到在子进程中启动的命令,则需要在启动时将文件句柄传送到程序中。然后,您等待所需的时间并使用print(或printf)发送数据。

有一个巨大的警告。如果外部程序直接打开控制台终端进行输入而不从stdin读取(即提示输入密码),则可能无法将数据发送到程序。

对于程序从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

命令开头的管道符号是open的一种特殊形式,用于将CMD文件句柄设置为命令stdin。这是des in the documentation