Python 子进程无法识别$PATH中的命令



我正在调试一个突然停止工作的sublime插件。

我在插件中有以下代码:

proc = subprocess.Popen(cmd, stdin=subprocess.PIPE, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, startupinfo=info, cwd=home)
data = proc.communicate()[0]

基本上,它正在执行一个顶部有#!/usr/bin/env php的文件。当我运行该命令时,我得到env: php: no such file or directory错误消息。

我用绝对路径修复了它。

解决方案1: #!/usr/bin/env/应用程序/MAMP/bin/php/php5.5.18/bin/php

虽然这可以工作,但我真的想知道为什么当php可用时,当我在终端中执行它并且命令的路径在$ path变量中定义时,它不能工作。

我该如何解决这个问题?

在文档中,您需要传递shell=True,作为subprocess.Popen的参数:

如果shell为True,则指定的命令将通过shell执行。如果您主要是为了Python在大多数系统shell上提供的增强控制流而使用Python,并且仍然希望方便地访问其他shell特性,例如shell管道、文件名通配符、环境变量扩展以及将~扩展到用户的主目录,那么这将非常有用。

尽管出于安全考虑,不鼓励使用shell=True

shell关键字参数将有所帮助,但请注意,文档确实建议在POSIX系统上使用subprocess32模块。

相关内容

最新更新