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

时间:2015-06-03 23:25:02

标签: php python shell

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

我在插件中有以下代码。

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变量中定义了命令的路径。

我该如何解决这个问题?

2 个答案:

答案 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