# #go #stdout #stdin #delve
Вопрос:
У меня есть двоичный файл Go под названием «runme», который успешно работает следующим образом:
./runme encrypt --password=password < plaintext.txt > encrypted.txt
Он успешно считывается в файле под названием «plaintext.txt» и выводит зашифрованный файл под названием «encrypted.txt».
Теперь я хотел бы использовать отладчик dlv для Go, чтобы отладить его следующим образом:
dlv exec ./runme -- encrypt -password=password < plaintext.txt > encrypted.txt
Однако я получаю следующее сообщение об ошибке от отладчика dlv:
Stdin is not a terminal, use '-r' to specify redirects for the target process or --allow-non-terminal-interactive=true if you really want to specify a redirect for Delve
Поэтому я попробую еще раз немного по-другому:
dlv exec -r ./runme -- encrypt -password=password < plaintext.txt > encrypted.txt
Но я получаю точно такое же сообщение об ошибке, как показано выше. Затем я пытаюсь сделать следующее:
dlv exec --allow-non-terminal-interactive=true ./runme -- encrypt -password=password < plaintext.txt > encrypted.txt
На этот раз я получаю другое сообщение об ошибке:
Command failed: command not available
То, что кажется простой вещью, я не могу сделать в отладчике. Что я мог сделать не так?
Комментарии:
1.
So I try again slightly differently:
Действительно? … Вы читали документацию о том, как-r
ее предполагается использовать?2. Используйте флаг-r.
dlv help redirect
3. Я попробовал dlv exec -r [stdin] plaintext.txt -r [выход] encrypted.txt ./runme — encrypt-пароль=пароль, но он выдает мне ошибку «ошибка перенаправления: stdin перенаправлен дважды».
Ответ №1:
С помощью @tkausl и @gopher я смог это выяснить.
Решение заключается в:
dlv exec -r stdin:plaintext.txt -r stdout:encrypted.txt ./runme -- encrypt -password=password