У меня есть сценарий питона, которая выводит названия программ, которые в настоящее время микшер громкости в ОС 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 свою учетную запись пользователя
'sys.stdout.flush()' всегда приятно делать. Это подразумевается, но для целей отладки всегда приятно иметь его там. Также может быть полезно добавить 'os.exit (1)', просто чтобы убедиться, что вы выходите с хорошим кодом выхода, - поэтому PHP не пытается мусорнуть выход или что-то еще. Опять же, только для целей отладки. – Torxed
@Torxed Я попробовал то, что вы предложили, и я получаю одинаковые результаты:/Как ни странно, хотя я сделал ошибку при внесении этих изменений, и я получил ошибку –
Мне новичок новичок - странно, что вы получите * * любой ** результат с использованием 'php index.php', но не при работе через веб-браузер, особенно в Windows. Если что-то у вашего сервера WAMP должно быть больше разрешений, так как (если я не ошибаюсь) WAMP запускается как пользователь службы под Windows. – Torxed