我正在尝试调试一个突然停止工作的崇高插件。
我在插件中有以下代码。
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 /Applications/MAMP/bin/php/php5.5.18/bin/php
虽然这有效,但我真的很想知道当我在终端执行 php 时,为什么它不起作用,并且$ PATH变量中定义了命令的路径。
我该如何解决这个问题?
答案 0 :(得分:2)
与docs一样,您需要传递shell=True
,作为subprocess.Popen
的参数:
如果shell为True,则将通过shell执行指定的命令。如果您主要使用Python来提供它在大多数系统shell上提供的增强控制流,并且仍然希望方便地访问其他shell功能,例如shell管道,文件名通配符,环境变量扩展,那么这非常有用。 〜扩展到用户的主目录。
虽然shell=True
的使用已被废除due to security considerations。
答案 1 :(得分:1)
shell keyword parameter会有所帮助,但请注意,文档确实建议在POSIX系统上使用subprocess32 module。