#python #vue.js #command-line #subprocess #vue-cli
#python #vue.js #командная строка #подпроцесс #vue-cli
Вопрос:
Я знаю, что вполне возможно запускать программы из скрипта Python, используя subprocess
модуль, но чего я, похоже, не могу понять, так это того, возможно ли пойти немного глубже и передать аргументы по умолчанию подпроцессу, который требует ввода из командной строки. Пожалуйста, смотрите конкретный пример ниже:
Я хочу создать новый проект vue, используя vue-cli из скрипта python, потому что помимо инициализации проекта я хочу автоматически копировать / перемещать файлы в пределах нового пространства каталога проекта. Итак, после выполнения некоторых настроек я хочу, чтобы подпроцесс запустил следующий код: subprocess.run(['vue', 'init', 'web pack-simple', '<project-name>']
что эквивалентно запуску $ vue init web pack-simple <project-name>
непосредственно в командной строке.
Здесь я хотел бы получить совет. При прямом запуске $ vue init web pack-simple <project-name>
из командной строки я затем захожу в CLI, где он запрашивает у меня название проекта, а затем вы нажимаете «Enter», а затем он запрашивает у вас описание проекта, а затем вы нажимаете «Enter», а затем он спрашивает, используете ли вы sass и т.д.
Есть ли какой-нибудь способ через subprocess
модуль, который я могу передать и автоматически вводить значения по умолчанию / указанные значения в этот vue-cli, чтобы всякий раз, когда vue-cli запрашивает название проекта и описание проекта, и т.д. они заполняются автоматически?
Заранее большое спасибо!
Комментарии:
1. Программа , которую вы пытаетесь запустить, запрашивает информацию у пользователя и ожидает ответа? Или вы просто пытаетесь передать программе аргументы командной строки?
2. @wwii Первый, поэтому, в частности, программа, которую я пытаюсь запустить, запрашивает у пользователя информацию и ожидает ответа
3. Похоже, вам нужно, чтобы ваша программа запустила 2-ю программу, которая запросит у вашей программы (думая, что это человек) входные данные. И вам нужен ваш код, чтобы автоматически заполнить этот необходимый ввод. Это правильно? И обязательно ли это должно быть сделано через подпроцесс? Или вы готовы использовать альтернативные библиотеки для этой части работы?
4. Да, вы можете отправлять данные по каналу в свой подпроцесс. Если вы можете сделать все это за один раз, это может быть сделано с помощью вызова
.communicate()
, который одновременно принимает входные данныеstdin
и выдает выходные данныеstdout
иstderr
. Однако, вероятно, проще использоватьpexpect
вместо того, чтобы использовать ваше собственное решение сsubprocess
.5. @RockAndRoleCoder Да, это совершенно верно. Нет, это не обязательно делать через
subprocess
, я рад использовать любой метод / библиотеку, которые будут работать. Мое единственное ограничение в том, что я предпочел бы иметь возможность делать это в скрипте Python.