为什么python子进程运行特定命令时会停止执行?

时间:2018-11-23 16:28:57

标签: python automation subprocess break pipenv

我想在开发过程中自动化某些任务。这是其中一项任务的一部分。我正在尝试使用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())

,但不运行以下行。 这是为什么?以及如何解决?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

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