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

標準入力ファイルのデータは次のとおりで、各行が 1 回の入力に対応しています。したがって、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

0

パールコード:

$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 に答える