Я запускаю net share
из сценария ruby для удаления общего сетевого ресурса Windows.
Если файлы в общем ресурсе используются, net share
спросит пользователя, хотят ли они продолжить удаление, поэтому мой сценарий должен проверить вывод команды и вывести Y
, если он обнаружит что net share
просит его ввести.
Чтобы можно было записать процесс, я открываю его с флагами доступа "r+"
.
При попытке записи в процесс с помощью IO#puts
появляется сообщение об ошибке:
Errno::EPIPE: Broken pipe
Что я здесь не так делаю? (Ошибка возникает на линии net_share.puts "Y"
)
(Текст вопроса, записанный net share
, не сопровождается переводом строки, поэтому я использую IO#readpartial
для чтения в выходных данных.)
def delete_network_share share_path
command = "net share #{share_path} /DELETE"
net_share = IO.popen(command, "r+")
text = ""
while true
begin
line = net_share.readpartial 1000 #read all the input that's available
rescue EOFError
break
end
text += line
if text.scan("Do you want to continue this operation? (Y/N)").size > 0
net_share.puts "Y"
net_share.flush #probably not needed?
end
end
net_share.close
end