2013-06-20 3 views
0

У меня есть сценарий Python (2.7), который подключается к удаленному устройству через SSH и настраивает его. Этот скрипт отлично работает, когда я запускаю его.Python SSH-скрипт не будет работать во время выполнения PHP

У меня есть страница PHP, которая выполняет другие скрипты Python, и они также работают нормально. Проблема: сценарий SSH не работает, когда я запускаю его со страницы PHP. (нет проблем со страницей PHP, ни сценария Python)

Чтобы быть более точным, сценарий (при исполнении PHP) работает до тех пор, пока не дойдет до кода, связанного первого SSH (import paramiko).

Как это может быть, и есть ли что-нибудь, что я могу сделать, чтобы заставить его работать? Спасибо!

(ОС:. Окна XP Сервер: Вамп (сервер HTTP Apachi)

для примера рассмотрим этот простой код:

fp=open("file.txt","w") 
fp.write("text") 
import paramiko 
fp.write("another text") 
fp.close() 

, если выполнены мною, все работает отлично Если на PHP. PAGE- только код до "импорта paramiko" не выполняется

или:.

fp=open("file.txt","w") 
fp.close() 
import paramiko 
fp2=open("file2.txt","w") 
fp2.close() 

Выполнено мной - оба файла созданы. по php - только первый.

Кроме того: я попытался использовать Try & Поймать, но ничего не получается. Никакое исключение не выбрасывается.

+2

Опубликовать код! –

+0

Было бы особенно полезно увидеть парамико-часть вашего скрипта python. Возможно, вы используете аутентификацию на основе ключа, и ключ не доступен для процесса PHP? –

+0

Пожалуйста, научитесь НЕ переопределять встроенные функции. Хотя это возможно, и язык очень гибкий, вы не должны делать этого, когда начинаете свое путешествие с Python. – Tadeck

ответ

2

Я полагаю, что paramiko не входит в вашу переменную окружения PYTHONPATH для пользователя Apache.

Когда Apache запускает PHP, он звонит PHP как любой пользователь «Апач», случается (в Linux обычно apache (или httpd) пользователь в группе www-data). Иногда у этого пользователя будут разные переменные среды, чем те, которые обычно имеют пользователи. Хотя это вообще не имеет значения, иногда это вызовет причудливые взаимодействия (и я вижу, что это происходит с Пипом).

Я хотел бы добавить попробовать ... кроме всего paramiko:

try: 
    import paramiko 
except Exception as e: 
    # log your exception here. 
    pass # I put this here so the example can compile. 
#rest of the script 

Это должно позволить вам знать, является ли или не установлена ​​его (и я подозреваю, что это не так).

+0

Исключение не было. – user2162550

+0

@ user2162550 Может ли быть тайм-аут? – cwallenpoole

+0

Я не знаю. Почему тайм-аут? – user2162550