You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python调用PHP脚本失败:无响应或写入文件为空如何解决?

问题原因

你遇到的异常是多个错误叠加导致的,具体原因如下:

  • 路径与参数格式错误
    1. 你写的PHP文件路径末尾多了不必要的空格(比如'writetofile.php '、'~/hen-durance/writetofile.php '尾部的空格),会被识别为文件名的一部分,导致系统找不到对应PHP脚本,执行失败。
    2. 波浪号~是shell专属的家目录展开语法,未开启shell=True时subprocess不会自动解析该符号,会把~当作普通路径字符处理,找不到对应文件。
    3. 第8种os.system写法拼接参数时缺少空格,实际执行的命令会变成/usr/bin/php ~/hen-durance/writetofile.php{chosenWord},PHP无法识别到传入的$argv[1]参数,写入空值。
  • subprocess挂起原因
    你调用subprocess时没有捕获stdout、stderr输出,当PHP脚本产生的输出填满缓冲区后,子进程会一直等待缓冲区被读取,进而导致主程序无限挂起。
  • 写入路径不固定问题
    你的PHP脚本中用相对路径GamesHistory.txt指定写入文件,写入位置由PHP进程的工作目录决定:你手动执行shell时工作目录是你预期的目录,而Python调用PHP时的工作目录是Python脚本的运行目录,会出现找不到写入路径、无写入权限的问题,最终生成空文件。
解决方案

按以下步骤修改即可解决问题:

  1. 优先修正PHP脚本的写入路径,避免相对路径导致的位置混乱:
<?php
    $word = $argv[1];
    // __DIR__ 代表当前PHP脚本所在目录,确保写入位置固定
    $file = fopen(__DIR__ . '/GamesHistory.txt', 'w');
    fwrite($file, $word);
    fclose($file);
?>
  1. Python侧优先使用subprocess.run执行调用,不要开启shell=True,手动展开家目录路径,同时捕获输出避免挂起,参考写法:
import subprocess
import os

# 手动展开家目录路径
php_script = os.path.expanduser("~/hen-durance/writetofile.php")
# 执行调用,捕获输出,设置超时避免异常挂起
result = subprocess.run(
    ["php", php_script, chosenWord],
    capture_output=True,
    text=True,
    timeout=5
)
# 可选:异常时打印错误信息方便排查
if result.returncode != 0:
    print(f"调用PHP失败,错误信息:{result.stderr}")
  1. 若确认要使用os.system,修正参数拼接的空格即可:
os.system(f'/usr/bin/php ~/hen-durance/writetofile.php {chosenWord}')

内容的提问来源于stack exchange,提问作者Fabio R.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 15:24:05