我想在开发过程中自动化某些任务。这是其中一项任务的一部分。我正在尝试使用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())
,但不运行以下行。 这是为什么?以及如何解决?
答案 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")