Используя subprocess.call
в python, я пытаюсь запустить Perl-скрипт, который запускает код на удаленных машинах для получения некоторой информации.
У меня есть два скрипта на машине A - python и perl.Скрипт python вызывает скрипт perl, используя метод subprocess.call
, передавая ему 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 запускает сценарий perl, передавая '198.168.1.2'
- Сценарий perl выполняет код и спит в течение 15 секунд
- Затем сценарий pythonзапускает perl-скрипт, передавая '' 198.168.3.4 '
- perl-скрипт выполняет код и спит 15 секунд
Следовательно, для запуска сценария perl требуется 30 секунд для обоихIP.
Ожидаемое поведение -
- Скрипт python запускает скрипт perl, передавая "198.168.1.2"
- вместо ожиданиядля завершения сценария perl с первого IP-адреса он выполняет тот же сценарий perl с «198.168.3.4».
Следовательно, время, затрачиваемое на выполнение сценария perl для обоих IP-адресов, более или менее равното же самое.