OSError:[Errno 7]参数列表过长:“ php”-Python 3.6

时间:2018-12-04 11:55:10

标签: python linux shell

我想从我的Python脚本中调用PHP脚本

我有此代码

subprocess.run(['php', "script.php", long_string], stdout=subprocess.PIPE)

但是我遇到错误

OSError: [Errno 7] Argument list too long: 'php'

我已阅读在线线程,对于Python 3+,应始终使用subprocess.run

我也尝试过

subprocess.run(['ulimit', '-s', 'unlimited', 'php', "script.php", long_string], stdout=subprocess.PIPE, shell=True)

但是我得到

OSError: [Errno 7] Argument list too long: '/bin/sh'

我的字符串是141,664 characters = 141,706 bytes,它也可以变大

我该怎么办?如何克服我的Python脚本的长度错误?

我的uname -a输出是

Linux mani 2.6.32-042stab123.9#1 SMP Thu Jun 29 13:01:59 MSK 2017 x86_64 x86_64 x86_64 GNU / Linux

1 个答案:

答案 0 :(得分:1)

感谢@Andras Deak为我指明了正确的方向,解决方案是从STDIN而不是命令行发送和读取数据

解决方案

Python代码

subprocess.run(['php', "script.php"], input=long_string.encode("utf-8"), stdout=subprocess.PIPE)

PHP代码

//to receive data from our Python scrapers
if (defined('STDIN')) {
    $post = json_decode(fgets(STDIN), true);
} 

旧代码(不起作用)

Python代码

subprocess.run(['php', "script.php", long_string], stdout=subprocess.PIPE)

PHP代码

//to receive data from our Python scrapers
if (defined('STDIN')) {
    $post = json_decode($argv[1], true);
}