python - 为什么我会丢失部分命令行参数?PHP/shell_exec
问题描述
我有一个 PHP 脚本,它获取“JSON 就绪”字符串的数据,并通过 shell_exec 将其通过命令行传递到 Windows 操作系统命令行。在另一端(这是一个 python 脚本),我通过 sys.argv 收集参数,出于调试目的,我将参数打印到一个简单的 .txt 文件中。当我检查该文件时,我注意到 PHP 脚本中我的参数的大约后半部分丢失了。在进行一些挖掘之后,我最初认为也许我在 PHP shell_exec 的函数或命令行本身中超出了某种字符限制。我的研究来自微软的这个页面:命令提示符(Cmd.exe)命令行字符串限制,指出命令行的字符限制为 2047 个字符。
我希望这将是我的问题,因为我可以解决它,但不幸的是我的命令字符串总共只有 1730 个字符。
我知道我可以将参数分块并单独发送块,或者将参数保存为文件并让我的python脚本以这种方式拾取它,但如果我在命令行的操作参数范围内,从某种意义上说这“应该”有效,那么我更愿意使用这种方法。更不用说我现在在 Windows 环境中为我们的应用程序的 Dev 版本工作,但是生产被推送到 Linux 服务器(我讨厌这个,但不幸的是我无法控制这些因素)。在我们的生产 Linux 发行版上,它可以工作并使用这个命令行进程。
这是我的命令行代码:
$cmd = "python C:\\xampp\\htdocs\\app\\pages\\plot\\python\\plotfunction.py " .$data;
$output = shell_exec($cmd .' 2>&1 &');
$data 是一个类似 json 的字符串,包含 1653 个字符。
读取 sys.argv 的 python 是这样的:
ATP_CHART_SPEC_json = sys.argv[1].replace("$", '"')
当我将 ATP_CHART_SPEC_json 保存到一个文件中时,它只包含 750 个字符。我失去了一半多一点的论点。
笔记:
我使用 python 中的 .replace 来克服以下问题:显然,当通过命令行发送字符串作为参数时(或由于我不知道的其他原因)我丢失了所有的 '"' 字符,当他们'在python中使用“”转义成为一个问题。所以在PHP中我暂时用$替换所有引号并在传输后将它们替换回来。我已经验证这不会(通常)损坏JSON字符串的完整性。
解决方案
推荐阅读
- jmeter - 测量 API 的响应时间
- cmake - 在 QtCreator 中运行时 CMake 找不到 ninja
- android - 使用 Android volley 向 laravel 发送数据
- python - 如何获取对 ReadVariableOp 正在读取的变量对象的引用?
- node.js - 从 puppeteer 到 ffmpeg 的管道屏幕截图
- javascript - 如何在 javascript 中使用回调函数结果填充数组?
- c# - 如何避免 ef 以上业务逻辑类中的重复代码?
- javascript - EDGE 在显示键盘输入时滞后
- azure-devops - 用于自动化而不是个人访问令牌的用户
- python - 在 matplotlib 图中配置网格线