如何在Perl中使用Net::SFTP::Foreign消除proFTP服务器欢迎信息
解决Net::SFTP::Foreign连接时的欢迎信息问题
我懂你的困扰——不想让服务器的欢迎信息打乱脚本的正常输出,既没法改服务器配置,也不想把整个脚本的输出都丢进/dev/null。刚好Net::SFTP::Foreign自带了灵活的文件句柄控制选项,能完美解决这个问题:
你可以在创建SFTP对象时,单独把这个连接产生的标准输出重定向到/dev/null,完全不会影响脚本其他部分的输出。具体代码如下:
# 先打开/dev/null的文件句柄 open my $null_out, '>', '/dev/null' or die "无法打开/dev/null: $!"; # 创建SFTP对象时指定stdout_fh为刚才的空句柄 my $sftp = Net::SFTP::Foreign->new( $sftserver, stdout_fh => $null_out, # 如果发现欢迎信息是输出到stderr的,再加下面这行: # stderr_fh => $null_out ); # 用完可以关闭句柄(脚本结束时也会自动关闭) close $null_out;
要是想写得更简洁,还可以用匿名文件句柄的写法,省去单独的open步骤:
my $sftp = Net::SFTP::Foreign->new( $sftserver, stdout_fh => do { open my $fh, '>', '/dev/null' or die "无法打开/dev/null: $!"; $fh } );
原理很直白:这个操作只会把当前SFTP连接产生的标准输出(也就是服务器的欢迎信息)导向空设备,脚本里其他print或者say的内容依然会正常输出到stdout,完全贴合你的需求。
内容的提问来源于stack exchange,提问作者Till1234
相关产品推荐
相关产品推荐

