[英]How to execute a perl script through python subprocess call?
我正在python中使用subprocess.call
,试图运行一个perl脚本,该脚本在远程计算机上运行代码以获取一些信息。
我在机器A上有两个脚本-python和perl。 python脚本使用subprocess.call
方法通过循环传递IP地址来调用perl脚本。 两种脚本都可以正常运行。
但是,perl脚本以串行顺序执行(一个IP接一个IP)。
# python code
def foo():
print()
IPs = ["198.168.1.2","198.168.3.4"]
for ip in IPs:
proc = call("perl script.pl '%s'" %ip, shell=True, stdin=PIPE)
foo()
# perl script
#!/usr/bin/perl
sub bar($)
{
//Code that ssh's to a remote-machine and gets required information
}
print(bar($ARGV[0]),"\n");
print("Sleeping for 15 sec\n");
sleep(15);
print("Done\n");
实际行为-
因此,两个IP都需要总共30秒才能运行perl脚本。
预期行为-
因此,对两个IP执行perl脚本所花费的时间大致相同。
这可以通过subprocess.Popen
完成。 这将在不阻塞主线程的情况下运行该进程。 您将看起来像这样:
def foo():
print()
IPs = ["198.168.1.2","198.168.3.4"]
procs = []
for ip in IPs:
proc = subproces.Popen(["perl", "script.pl", ip], shell=True, stdin=PIPE)
procs.append(proc)
# wait for all the processes to finish
for proc in procs:
proc.wait()
foo()
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.