Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将外部程序的输出发送到Perl套接字?_Perl_Sockets - Fatal编程技术网

如何将外部程序的输出发送到Perl套接字?

如何将外部程序的输出发送到Perl套接字?,perl,sockets,Perl,Sockets,我刚刚开始学习使用Perl进行套接字编程。是否有一种方法可以使用Perl套接字编程从已经运行的脚本/工具发送输出(STDOUT)数据/图像?如果现有脚本将其输出转储到控制台(STDOUT),您可以使用以下命令重定向它(请参阅): 在服务器上: server-host:~$ nc -l -p 3232 > file.txt 在客户机上: client-host~$ perl -e 'printf( "Hello %s\n", "world" )' | nc server-host 3232

我刚刚开始学习使用Perl进行套接字编程。是否有一种方法可以使用Perl套接字编程从已经运行的脚本/工具发送输出(STDOUT)数据/图像?

如果现有脚本将其输出转储到控制台(
STDOUT
),您可以使用以下命令重定向它(请参阅):

在服务器上:

server-host:~$ nc -l -p 3232 > file.txt
在客户机上:

client-host~$ perl -e 'printf( "Hello %s\n", "world" )' | nc server-host 3232
如果端口(3232)是任意的,那么这个选项当然是任意的,但是在Unix上,它应该大于1024,这样您就可以在没有根权限的情况下绑定它

编辑: 那么这个怎么样:

#!/usr/bin/env perl
use strict;

my $usage = "Usage: $0 <host:port> <prog>\n";
my $hp = shift @ARGV or die "$usage";
my $prg = shift @ARGV or die "$usage";
my ($host,$port) = split ":", $hp;

defined $host or die "$usage";
defined $port or die "$usage";

exec "$prg @ARGV | nc $host $port" or die "can't execute $prg\n";
#/usr/bin/env perl
严格使用;
my$usage=“usage:$0\n”;
我的$hp=shift@ARGV或die“$usage”;
my$prg=shift@ARGV或die“$usage”;
my($host,$port)=拆分“,$hp;
已定义$host或die“$usage”;
已定义$port或die“$usage”;
exec“$prg@ARGV | nc$host$port”或die“无法执行$prg\n”;

谢谢Nikolai:你能不能也给我简单介绍一下,让这项任务自动化。谢谢你,但这也是在做同样的事情,在执行命令后,会话中断,发送另一个命令,我必须再次打开服务器。