我正在调试一个突然停止工作的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模块。