/ bin / sh - Python的非交互式用法

时间:2011-06-12 18:50:37

标签: python shell

我正在从Python调用cmd:

subpocess.Popen(['coffee'], shell=True)
我相信的是:

/bin/sh -c "coffee"

从文档中我已经读过,在非交互模式文件中,如/ etc / profile,/ etc / bash.bashrc不会被读取,并且使用默认的$ PATH(init $ PATH)。我对吗?是否有唯一的方法将咖啡添加到$ PATH是将其复制到/ usr / local / bin?

2 个答案:

答案 0 :(得分:2)

不,shell将从Python解释器继承PATH,即它将是os.getenv('PATH')。此外,您可以在命令中设置路径:

subprocess.Popen(['PATH=/where/ever/bin:$PATH coffee'], shell=True)

虽然我真的建议你使用coffee的完整路径,或者在执行Python程序之前设置PATH

答案 1 :(得分:2)

从历史上看,对于作为非交互式命令调用的shell,没有读取任何启动文件,因为可能已经设置了环境。

Python,shell,实际上几乎所有内容都会将现有环境或至少PATH环境变量传递给子shell,因此,在某种程度上,您已经执行了.profile或者bash扩展。 (因为它是在用户登录时运行的,而其他进程继承了修改后的PATH。)

您拥有的选项:

  • /etc/profile
  • 中为所有系统用户指定路径
  • 需要用户提供适当的PATH设置(您继承它们)<​​/ li>
  • 使用完整路径名运行子流程实用程序
  • 将所有命令放在PATH上已有的目录中