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

2024-06-30 08:47:14 发布

您现在位置:Python中文网/ 问答频道 /正文

我从Python调用cmd如下:

subpocess.Popen(['coffee'], shell=True)

我相信可以翻译成:

^{pr2}$

我从文档中读到,在非交互模式下,像/etc/profile,/etc/巴什.bashrc不读取,使用默认的$PATH(init$PATH)。我说得对吗?是否只有将coffee添加到$PATH的方法是将其复制到/usr/local/bin?在


Tags: path方法文档cmdtrueinit模式etc
2条回答

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

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

您可以选择:

  • /etc/profile中的所有系统用户指定路径
  • 要求用户提供适当的路径设置(由您继承)
  • 使用完整路径名运行子进程实用程序
  • 将所有命令放在路径上已有的目录中

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

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

不过,我建议您在执行Python程序之前,要么使用coffee的完整路径,要么设置PATH。在

相关问题 更多 >