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