Почему подпроцесс python перестает выполняться при запуске определенной команды? - PullRequest
0 голосов
/ 23 ноября 2018

Я хочу автоматизировать определенные задачи во время разработки.Это часть одной из этих задач.Я пытаюсь установить django автоматически с помощью pipenv.

import os
import subprocess 

def run(project):
    os.mkdir(project)
    os.chdir(project)
    subprocess.run("pipenv install django".split())
    os.mkdir("io")
    os.chdir("io")
    subprocess.run("pipenv shell".split())
    subprocess.run("django-admin startproject _django".split())
    print(f"Created new django project at {project}/io/_django")



if __name__ == '__main__':
    run("hello-world")

Когда я запускаю этот код, он выполняется до строки:

subprocess.run("pipenv shell".split())

, но не запускает следующие строки.Это почему?И как это решить?

Ответы [ 2 ]

0 голосов
/ 23 ноября 2018

Окончательный код куратора: (Авторы @Andrew Morozko)

import os
import subprocess 

def run(project):
    os.mkdir(project)
    os.chdir(project)
    subprocess.run("pipenv install django")
    os.mkdir("io")
    os.chdir("io")
    subprocess.run("pipenv run django-admin startproject _django")
    print(f"Created new django project at {project}/io/_django")



if __name__ == '__main__':
    run("hello-world")
0 голосов
/ 23 ноября 2018

Это потому, что pipenv shell порождает интерактивную оболочку и ожидает ввода в stdin.

Вам лучше использовать pipenv run для запуска команд в вашей виртуальной среде: pipenv run django-admin ...

PS: вы можете удалить .split(), subprocess.run может работать с командой в форместроки.Используйте явный массив аргументов, если вам нужно включить пробел в качестве символа внутри аргумента или при работе с ненадежными (предоставленными пользователем) аргументами.

...