/ bin / sh-来自Python的非交互用法

问题描述

| 我像这样从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中已经存在的目录中