我看过几个类似的问题,但似乎都没有解决这个问题,或者他们使用了一种我不熟悉的管道形式,或者我正在使用“管道”来代替正确的单词。
首先,我在Windows 7上,我正在尝试做的是获取一个Perl脚本来调用并多次输入到另一个Perl脚本。
我要这样做的方法是使用System()函数。
当直接放入命令行时,这有效,虽然有点草率:
Functionalscript.pl < InputFile > OutputFile
从输入文件中获取内容执行该功能并将其完美地写入输出文件。但是,在我的调用脚本中使用“system()”函数时,输入未注册,但输出文件已创建(它只是空白)。
问题在于:
system("Functionalscript.pl < InputFile > OutputFile")
由于某些原因,当使用它时,functionalscript不会将输入作为stdin接收。有没有办法使这项工作?
答案 0 :(得分:0)
根据perldoc -f system
(http://perldoc.perl.org/functions/system.html):
如果只有一个标量参数,则检查参数是否为shell元字符,如果有,则将整个参数传递给系统的命令shell进行解析(这是Unix平台上的/ bin / sh -c,但在其他平台上有所不同)。如果参数中没有shell元字符,它将被拆分为单词并直接传递给execvp,这样效率更高。
这意味着如果您的命令中包含>
或<
,则应将其传递给shell,输入和输出重定向应按预期工作。
答案 1 :(得分:0)
system("x:/path/perl.exe Functionalscript.pl InputFile > OutputFile")
由mpapec提供,Works。必须包含“x:/path/perl.exe”。