2017-01-01 2 views
1

У меня есть сценарий питона, которая выводит названия программ, которые в настоящее время микшер громкости в ОС Windows 10.Не получаю выход из питона скрипта при запуске через PHP

Это прекрасно работает, когда я запускаю его в ЦМД.

C:\wamp\www\Volume>py test.py 
firefox.exe,Spotify.exe,Microsoft.Photos.exe,Steam.exe, 

и вот мой сценарий на питоне.

import sys 
from pycaw.pycaw import AudioUtilities 


def main(): 
list = '' 
sessions = AudioUtilities.GetAllSessions() 
for session in sessions: 
    volume = session.SimpleAudioVolume 
    if session.Process and session.Process.name(): 
     list += session.Process.name() + ',' 

sys.stdout.write(list)  


if __name__ == "__main__": 
    main() 

И мой PHP:

$python = "py"; 
$script = "test.py"; 
exec("$python $script 2>&1", $output); 
print_r($output); 

Но когда я запускаю его в PHP с помощью WAMP, я не получаю никакого вывода из этого сценария, ничего не выводится.

Если я изменяю свой скрипт на python, чтобы содержать только «print (« TESTING »), то я могу прочитать этот вывод в PHP, что заставляет меня думать, что мой код на Python не работает, возможно, из-за разрешений. Поэтому я изменил пользователь от системы к моему собственному пользователю, когда я использую:

echo exec("whoami") // Outputs my user account name 

Я думал, может быть мой PHP скрипт был выключен, поэтому я попытался запустить его, хотя в командной строке, но результаты, что я хочу:

C:\wamp\www\Volume>php index.php 
Array 
(
[0] => firefox.exe,Spotify.exe,Microsoft.Photos.exe,Steam.exe, 
) 

Так что я в недоумении, почему, когда я исполняю свой PHP код в моем браузере, я не получаю никакого вывода, если мой питон скрипт не содержит только:

print("TESTING") 

Что может не так ли?

EDIT Так что я решил отладить это дальше, изменяя мой питон скрипт для создания файла .txt на моем рабочем столе, это работает отлично при запуске его через командную строку. Но опять же, когда я запускаю его через свой браузер/PHP, этот файл не создается. Так, может быть, мне нужно предоставить специальные разрешения для моего сценария python? Я не уверен, почему мне это нужно, хотя, поскольку я дал PHP свою учетную запись пользователя

+0

'sys.stdout.flush()' всегда приятно делать. Это подразумевается, но для целей отладки всегда приятно иметь его там. Также может быть полезно добавить 'os.exit (1)', просто чтобы убедиться, что вы выходите с хорошим кодом выхода, - поэтому PHP не пытается мусорнуть выход или что-то еще. Опять же, только для целей отладки. – Torxed

+0

@Torxed Я попробовал то, что вы предложили, и я получаю одинаковые результаты:/Как ни странно, хотя я сделал ошибку при внесении этих изменений, и я получил ошибку –

+0

Мне новичок новичок - странно, что вы получите * * любой ** результат с использованием 'php index.php', но не при работе через веб-браузер, особенно в Windows. Если что-то у вашего сервера WAMP должно быть больше разрешений, так как (если я не ошибаюсь) WAMP запускается как пользователь службы под Windows. – Torxed

ответ

0

Так что, я думаю, я узнал, почему я не получаю никакого вывода из моего сценария python, благодаря @Torxed.

Похоже, что когда я запускаю скрипт Python через WAMP/PHP, он должен работать как другой пользователь/среда, в которой нет аудио.

Это странно, однако, поскольку я установил 'wampapache64' для запуска в качестве учетной записи пользователя, даже после перезагрузки я все равно получаю одинаковые результаты.

Я даже пытался

runas /savecred /noprofile /user:<USER> 

Но это просто возвращает запрос на ввод пароля, который не сможет заполнить в PHP.

Этот проект сейчас выглядит как тупик.

Смежные вопросы