问题描述
|
我像这样从Python调用cmd:
subpocess.Popen([\'coffee\'],shell=True)
我相信它被翻译成:
/bin/sh -c \"coffee\"
从文档中我已经读到,在非交互模式下,例如/ etc / profile,不会读取/etc/bash.bashrc,并且使用默认的$ PATH(初始$ PATH)。我对吗?将咖啡添加到$ PATH的唯一方法是将其复制到/ usr / local / bin吗?
解决方法
不,外壳程序将从Python解释器继承
PATH
,即它将是os.getenv(\'PATH\')
。另外,您可以在命令中设置路径:
subprocess.Popen([\'PATH=/where/ever/bin:$PATH coffee\'],shell=True)
尽管我确实建议您在执行Python程序之前使用完整路径到coffee
,或设置PATH
。
, 从历史上看,因为假定已经建立了环境,所以对于作为非交互式命令调用的外壳,不会读取任何启动文件。
Python,shell,实际上几乎所有东西都将现有环境或至少PATH
环境变量传递给子shell,因此,在某种程度上,您已经执行了.profile
或bash扩展。 (因为它是在用户登录且其他进程继承了已修改的PATH时运行的。)
您有以下选择:
在ѭ9中为所有系统用户指定路径
要求用户提供适当的PATH设置(您可以继承它们)
使用完整路径名运行子流程实用程序
将所有命令放在PATH中已经存在的目录中