Я знаю, что об этом спрашивали много раз, но мне еще предстоит найти правильный способ сделать это.Если я хочу выполнить локальную команду, в документах говорится, что я должен использовать подпроцесс, поскольку он заменяет все другие методы, такие как os.system / peopen и т. Д.
Если я вызываю subprocess.Popen(command, shell=True, stdout=subprocess.PIPE)
в моей программе, и команданапример, директива openvpn, которая соединяет мой компьютер с VPN, процесс будет зависать бесконечно, так как openvpn возвращает свой вывод, заканчивающийся новой строкой, но зависает там, когда подключен, и моя программа (замороженная) тоже.
Некоторые говорят,Я должен удалить stdout=subprocess.PIPE
, который действительно работает неблокирующим образом, но затем все выводится на консоль вместо того, чтобы у меня был какой-то контроль над выводом (возможно, я не хочу его печатать).
Так есть ли какой-то правильный способ сделать это, например, может быть выполнение команд неблокирующим способом, а также иметь контроль над выводом .?