0

我想./runnable在参数input.afa上运行和执行。这个可执行文件的标准输入是通过文件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
4

2 回答 2

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;
}

有关在文档中打开命令的更多信息。

于 2009-08-05T17:22:49.210 回答
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
于 2009-08-05T17:34:35.427 回答