подпроцесс не работает при запуске внутри pycharm - PullRequest
0 голосов
/ 19 января 2020

Ну, я пытаюсь заставить скрипт python загрузить некоторые данные git, используя команду оболочки. Однако я ожидаю, что команда git запросит вход пользователя в систему и сообщит о состоянии в оболочку, используемую для вызова python. Я попытался сделать это, используя pipe.

subprocess.run('git clone SERVER ./build',
               shell=True)

Однако я ничего не вижу, и процесс python просто ждет без запроса ввода.

при запуске это в терминале, непосредственно использующем python main.py, он работает , просто при запуске через IDE pycharm вход и выход съедаются.
Просто для пояснения: когда я запускаю его через launcher of pycharm Я замечаю, что процесс "никогда не заканчивается", пока я его не убью, подняв KeyboardInterrupt. Так что он «где-то» ждет ввода пользователя, просто он не отображается в консоли pycharm.

Как мне это сделать? Если я не добавляю shell=True, то подпроцесс жалуется, что команда git не является существующим файлом / каталогом.

Ответы [ 2 ]

0 голосов
/ 29 января 2020

В настройках запуска есть флаг конфигурации, который должен быть установлен, чтобы это работало:

в вкладка конфигурации , под Выполнение , отметка эмуляция вывод терминала в консоли .

В моем случае мне пришлось перезапустить pycharm, чтобы он вступил в силу при обновлении старых конфигураций (это работало напрямую при добавлении его в новую конфигурацию запуска).

0 голосов
/ 20 января 2020

Я рекомендую вместо этого использовать subprocess.call.

А при запуске команд оболочки в IDE может потребоваться указать полный путь к исполняемому файлу.

git_exec = '/usr/local/bin/git'

returncode = subprocess.call('{0} clone SERVER ./build'.format(git_exec), 
                             shell=True)
if returncode != 0:
    # Code wasn't executed successfully
    # Do something
    pass
...