2016-08-29 5 views
0

У меня есть следующая строка кода в php, которую я использую для выполнения экрана python. и он принимает в тексте из HTML текстового поля, которое будет содержать символы новой строкикак передать строку, содержащую новую строку для python в php

$string = $_POST['textarea']; // e.g. "String 1\n string 2\n" 
$command = escapeshellcmd("python script.py -c \"$string\""); 

когда script.py выполняется, только «Строка 1» принимается питон скрипт как арг. Могу ли я спросить, есть ли какой-нибудь родной способ для передачи строки?

Если вы чувствуете, что это дублированный вопрос, пожалуйста, дайте мне знать, где я могу найти этот ответ. Я искал все содержимое stackoverflow.

+0

внутри вашего скрипта.py 'sys.argv [1] = sys.argv [1] .rstrip()' – dsgdfg

+0

нет, что не сработает. Я пытаюсь передать строки, содержащие новую строку. Я не пытаюсь обрезать свою строку – Mox

+0

sys.argv [1] = sys.argv [1] .split ("\ n") получил список внутри 'sys.argv [1]' – dsgdfg

ответ

0

Мне удалось найти способ сделать это.

В файле PHP, заменить все строку с «\ п» перед вызовом EscapeShellCmd

$string = trim(preg_replace('/[\r\n]+/', '\n', $_POST['textarea'])); 

// For a string like: 
// abcd 
// defg 
// will become 
// abde\\ndefg 

С новой строки символа «\ п» была замаскирована PHP EscapeShellCmd с префиксом слэш. оболочка сможет обрабатывать строку, а python получит abde \ ndefg как один из аргументов. Далее в коде Python, мы просто должны отменить побег, используя код ниже

arg = sys.argv[1].decode('string_escape') 

Я надеюсь, что выше решение будет в состоянии помочь тем, кто сталкивается с аналогичной проблемой, как я. =)

Смежные вопросы