我想在参数 input.afa 上运行并执行./runnable
。此可执行文件的标准输入是通过文件 finalfile 。我之前尝试使用bash脚本做同样的事情,但这似乎没有成功。所以我想知道Perl是否提供了这样的功能。我知道我可以使用反引号或system()调用使用其参数运行可执行文件。有关如何通过文件提供标准输入的任何建议。
_ 更新 _
正如我所说,我已经为此编写了一个bash脚本。我不知道如何在Perl中实现它。我写的bash脚本是:
#!/bin/bash
OUTFILE=outfile
(
while read line
do
./runnable input.afa
echo $line
done<finalfile
) >$OUTFILE
标准输入文件中的数据如下,其中每一行对应一次输入。因此,如果有10行,则可执行文件应运行10次。
__DATA__
2,9,2,9,10,0,38
2,9,2,10,11,0,0
2,9,2,11,12,0,0
2,9,2,12,13,0,0
2,9,2,13,0,1,4
2,9,2,13,3,2,2
2,9,2,12,14,1,2
答案 0 :(得分:1)
如果我理解你的问题,那么你可能正在寻找这样的事情:
# The command to run.
my $command = "./runnable input.afa";
# $command will be run for each line in $command_stdin
my $command_stdin = "finalfile";
# Open the file pointed to by $command_stdin
open my $inputfh, '<', $command_stdin or die "$command_input: $!";
# For each line
while (my $input = <$inputfh>) {
chomp($input); # optional, removes line separator
# Run the command that is pointed to by $command,
# and open $write_stdin as the write end of the command's
# stdin.
open my $write_stdin, '|-', $command or die "$command: $!";
# Write the arguments to the command's stdin.
print $write_stdin $input;
}
有关在documentation中打开命令的详细信息。
答案 1 :(得分:0)
Perl代码:
$stdout_result = `exescript argument1 argument2 < stdinfile`;
其中stdinfile包含您希望通过stdin传递的数据。
聪明的方法是打开stdinfile,通过select绑定到stdin,然后重复执行。简单的方法是将您想要传递的数据放在临时文件中。
示例:
open $fh, "<", "datafile" or die($!);
@data = <$fh>; #sucks all the lines in datafile into the array @data
close $fh;
foreach $datum (@data) #foreach singluar datum in the array
{
#create a temp file
open $fh, ">", "tempfile" or die($!);
print $fh $datum;
close $fh;
$result = `exe arg1 arg2 arg3 < tempfile`; #run the command. Presumably you'd want to store it somewhere as well...
#store $result
}
unlink("tempfile"); #remove the tempfile