Я пишу скрипт на python (2.7), в котором мне нужно выполнить некоторые команды оболочки, которые будут отправлять UDP-пакеты на удаленную виртуальную машину. Для выполнения команды я использую подпроцесс lib, а также методы Popen и call.
Следующий код показывает мои 2 подхода к отправке пакета UDP. Проблема в том, что ни один из них (call или Popen) не работает (и не работает os.system). Команда интерпретируется как одиночное эхо строки «hello> /dev/udp/192.168.85.36/3000», как показано, когда я печатаю вывод из ТРУБЫ.
myCmd = 'echo hello > /dev/udp/192.168.85.36/3000'
subprocess.call(myCmd, shell=True)
subprocess.Popen(myCmd.split(), stderr=subprocess.PIPE,\
stdout=subprocess.PIPE)
subprocess.Popen(['echo', 'packet', '>','/dev/udp/192.168.85.36/3000'],\
shell=False, stderr=subprocess.PIPE,stdout=subprocess.PIPE)
Интересно то, что когда я выполняю ту же самую команду непосредственно в терминале, пакет UDP принимается в удаленной виртуальной машине. Разница в том, что внутри программы команда echo находится внутри цикла, выполняемого несколько раз (что является ожидаемым поведением). Есть идеи?