在Python的子进程模块中使用PATH

时间:2016-02-22 17:04:58

标签: python python-3.x subprocess

我在Python的subprocess模块中偶然发现了一个奇怪的行为:

>>> import os, subprocess
>>> del os.environ["PATH"]
>>> subprocess.run(["python", "--version"])
Python 3.5.1
CompletedProcess(args=['python', '--version'], returncode=0)

我想知道如何在PATH环境变量未设置的情况下运行该命令?是否有默认PATH

2 个答案:

答案 0 :(得分:4)

是的,至少在Linux中有一个默认的PATH。

请考虑Linux execl() man page

中的这句话
  

如果未定义[PATH变量],则路径列表默认为当前目录,后跟confstr(_CS_PATH)返回的目录列表。 (此confstr(3)调用通常返回值“/ bin:/ usr / bin”。)

答案 1 :(得分:0)

os.defpath

  

exec*p*spawn*p*使用的默认搜索路径   环境没有'PATH'密钥。也可以通过os.path

获取

它被posixpath.py (os.path on POSIX systems)中的':/bin:/usr/bin'ntpath.py (os.path on Windows)中的'.;C:\\bin'硬编码。