OSError: [Errno 7] Список аргументов слишком длинный: 'php' - Python 3.6

1

Я хочу вызвать PHP-скрипт из моего сценария Python

У меня есть этот код

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

но я получаю ошибку

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

Я читал онлайн-потоки, что всегда должен использовать subprocess.run для Python 3+

Я также пробовал

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

  • 0
    Я немного отредактировал, чтобы сделать более очевидным, что ваш последний элемент - это действительно длинная строка. Работает ли эта же команда в терминале (вне питона)?
  • 1
    @AndrasDeak - эта команда pastebin.com/M8ZdJXtT, и она не выполняется в оболочке
Показать ещё 7 комментариев
Теги:

1 ответ

0

Благодаря @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);
} 

Ещё вопросы

Сообщество Overcoder
Наверх
Меню