【问题标题】:Not getting output from python script when run through PHP通过 PHP 运行时没有从 python 脚本获取输出
【发布时间】:2017-05-16 01:11:45
【问题描述】:

我有一个 python 脚本,可以打印出当前在 Windows 10 的音量混合器中的程序名称。

当我在 cmd 中运行它时效果很好。

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

这是我的python脚本。

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);

但是当我使用 WAMP 在 PHP 中运行它时,我没有从该脚本获得任何输出,没有任何输出。

如果我将 python 脚本更改为仅包含“print(”TESTING")”,那么我可以在 PHP 中正常读取该输出,这让我认为我的 python 代码可能由于权限而失败。所以我将用户从 SYSTEM 更改为我自己的用户,所以当我使用时:

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 代码时,我没有得到任何输出,除非我的 python 脚本只包含:

print("TESTING")

可能出了什么问题?

编辑 因此,我决定通过更改我的 python 脚本以在我的桌面上创建一个 .txt 文件来进一步调试它,这在通过命令行运行它时工作正常。但同样,当我通过浏览器/PHP 运行它时,并没有创建该文件。所以也许我需要为我的 python 脚本授予特殊权限?我不知道为什么我需要这样做,因为我已经给了 PHP 我的用户帐户

【问题讨论】:

  • sys.stdout.flush() 总是很好。这是隐含的,但出于调试目的,将它放在那里总是很甜蜜。此外,添加 os.exit(1) 可能很有用,只是为了确保您以良好的退出代码退出 - 因此 PHP 不会尝试对输出或任何内容进行垃圾处理。同样,仅出于调试目的。
  • 对我来说,一个新手新手 - 使用 php index.php 会得到 any 结果很奇怪,但在通过网络浏览器运行时却不会,尤其是在 Windows 中。如果有的话,您的 WAMP 服务器应该拥有更多权限,因为(如果我没记错的话)WAMP 在 Windows 下作为服务用户运行。
  • 你的 apache 错误日志是怎么说的?有什么吗?您能否将print("Just something"); 添加到您的index.php 以确保它有输出? pref 一个在开始和一个在底部以查看执行的程度。
  • @Torxed 是的,这很奇怪,我实际上将 WAMP 运行的用户类型更改为我自己的帐户而不是服务,但我得到了完全相同的结果。我的 apache 错误日志什么也没说!是的,我的 index.php 很好,也可以输出很好的东西:/

标签: php python permissions windows-10


【解决方案1】:

所以我想我找到了为什么我没有从我的 python 脚本中得到任何输出,这要感谢@Torxed。

似乎当我通过 WAMP/PHP 运行 Python 脚本时,它必须作为没有任何音频的不同用户/环境运行。

这很奇怪,因为我已将“wampapache64”设置为作为我的用户帐户运行,即使重新启动后我仍然得到相同的结果。

我试过了

runas /savecred /noprofile /user:<USER>

但这只是返回我无法在 PHP 中填写的密码提示。

这个项目目前看来是个死胡同。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-01
    • 2017-04-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-07-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多