Perl中如何将printf生成的$def内容输出到文件而非屏幕
解决方法
首先你现有代码存在一个误区:printf函数的作用是直接将格式化后的内容输出到标准输出(也就是你的screen屏幕),它的返回值是打印成功的字节数,并不是格式化后的字符串,所以你存在$def变量里的内容并不是你想要的命令字符串,首先需要把printf替换为sprintf,才能把格式化后的内容存入变量。
之后有两种实现写入文件的方案可选:
方案1:修改脚本代码,直接将内容写入指定文件
修正后的代码示例如下:
# sprintf仅做字符串格式化,不会输出到屏幕,结果存入$def变量 my $def = sprintf '/opt/bin/run server=%s os="%s" version=%s application=%s', $server, $os, $version, $application; # 打开文件,>>为追加模式(每次运行内容追加到文件末尾),换成>则为覆盖模式 open my $file_handle, '>>', '/你要保存的文件路径/目标文件名.log' or die "打开文件失败: $!"; # 将$def内容写入文件 print $file_handle $def."\n"; # 关闭文件句柄 close $file_handle;
你只需要把代码里的/你要保存的文件路径/目标文件名.log替换为实际的存储路径即可。
方案2:不修改代码,运行脚本时直接重定向输出
如果你不想改动现有脚本,可以在执行脚本的时候直接把标准输出重定向到文件,命令示例:
# 追加模式,内容追加到文件末尾 perl 你的脚本名.pl >> /你要保存的文件路径/目标文件名.log # 覆盖模式,每次运行清空原有文件内容再写入 perl 你的脚本名.pl > /你要保存的文件路径/目标文件名.log
该方案会把脚本所有输出到屏幕的内容都写入目标文件,适合临时调整输出位置的场景。
内容的提问来源于stack exchange,提问作者Ayad
相关产品推荐
相关产品推荐

