我在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的perl脚本总共需要30秒。
预期的行为-
因此,两个IP的执行perl脚本所花费的时间大致相同。
答案 0 :(得分:0)
这可以通过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()