在 python 中使用subprocess.call时,我正在尝试运行一个 perl 脚本,该脚本在远程机器上运行代码以获取一些信息。
我在机器 A 上有两个脚本——python 和 perl。python 脚本使用subprocess.call方法调用 perl 脚本,方法是在循环中将 IP 地址传递给它。两个脚本都运行得很好。
但是,perl 脚本是按串行顺序执行的(一个 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");
实际行为——
- python脚本通过传递'198.168.1.2'来运行perl脚本
- perl 脚本执行代码并休眠 15 秒
- 然后 python 脚本通过传递 ''198.168.3.4' 运行 perl 脚本
- perl 脚本执行代码并休眠 15 秒
因此,为这两个 IP 运行 perl 脚本总共需要 30 秒。
预期行为 -
- python脚本通过传递'198.168.1.2'来运行perl脚本
- 它不是等待 perl 脚本完成第一个 IP,而是使用“198.168.3.4”执行相同的 perl 脚本。
因此,为两个 IP 执行 perl 脚本所花费的时间或多或少是相同的。