Python 3.x 为什么subprocess.run()返回空值?

Python 3.x 为什么subprocess.run()返回空值?,python-3.x,subprocess,Python 3.x,Subprocess,当我运行此命令时: >>> import subprocess >>> subprocess.run(['/home/nicolas/.local/venvs/docker-compose/bin/python', '-c', "'import sys; print(sys.path[-1])'"], stdout=subprocess.PIPE) 我得到一个空的stdout: CompletedProcess(args=['/home/nicolas/.l

当我运行此命令时:

>>> import subprocess
>>> subprocess.run(['/home/nicolas/.local/venvs/docker-compose/bin/python', '-c', "'import sys; print(sys.path[-1])'"], stdout=subprocess.PIPE)
我得到一个空的
stdout

CompletedProcess(args=['/home/nicolas/.local/venvs/docker-compose/bin/python', '-c', "'import sys; print(sys.path[-1])'"], returncode=0, stdout=b'')
但是,当我在控制台中直接运行命令时,我得到了我想要的结果:

$ /home/nicolas/.local/venvs/docker-compose/bin/python -c 'import sys; print(sys.path[-1])'
/home/nicolas/.local/venvs/docker-compose/lib/python3.6/site-packages

有人能告诉我为什么吗?和/或告诉我如何获得特定venv的
sys.path

正如@Aran Fey所说,
子流程
已经逃逸了参数。所以双引号是没有必要的

这项工作:

>>> subprocess.run(['/home/nicolas/.local/venvs/docker-compose/bin/python', '-c', 'import sys; print(sys.path[-1])'], stdout=subprocess.PIPE)

尝试在导入系统中不使用单引号;打印(系统路径[-1])”
subprocess
已经为您转义了参数,因此不需要这些引号。您让python计算一个字符串文本,因此当然没有输出。