为什么 python 子进程在运行某个命令时停止执行?

Why python subprocess stops executing when it runs a certain command?

我想在开发过程中自动执行某些任务。这是其中一项任务的一部分。我正在尝试使用 pipenv 自动安装 django。

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())

但 运行 没有以下几行。 这是为什么?以及如何解决?

这是因为 pipenv shell 产生了一个交互式的 shell 并且它期望在 stdin 上输入。

您最好在虚拟环境中使用 pipenv run 到 运行 命令:pipenv run django-admin ...

P.S.: 你可以删除 .split()subprocess.run 可以使用字符串形式的命令。如果您需要能够将 space 作为参数包含在参数中,或者在使用不受信任的(用户提供的)参数时,请使用显式参数数组。

最终策划代码: (感谢@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")