如何解决/ 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中已经存在的目录中
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。