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计算一个字符串文本,因此当然没有输出。