2014-11-28 3 views
0

Вот проблема:прохождение комплексных параметров из PHP на Python

<?php 
$x = '1 2 3'; 
echo shell_exec('python xyz.py .$x'); 
?> 

и Python:

x = sys.argv[1] 
print (x) 

печатает 1 которая очевидна, так как это нарушает параметры, передаваемые с пространством в качестве разделителя.

Так что я могу идти вперед делать что-то вроде

string = '' 
for word in sys.argv[1:]: 
    string += word + ' 

но это остановит меня от отправки каких-либо других параметров после $x, поскольку длина $x не будет известно и sys.argv[1:] бы все после argv[1] в виде Единственный параметр

Другое возможное решение использует статический разделитель, такой как #, заменяя пробелы # на PHP, а затем заменяя # пробелами. Это будет работать, но это тривиальный способ решить проблему.

так, есть ли какое-либо другое решение?

+1

его не ясно, что вы хотите для того чтобы достигнуть – Hackaholic

ответ

0

Это оболочка материал, не питон (или PHP), специфичными ... Версия Баш скрипт:

#!/bin/bash 

echo "number of args : $#" 
i=1 
for arg 
do 
echo "arg $((i++)) : $arg" 
done 


[email protected]:~/Work/playground/shpy$ ./test.sh 1 2 3 
number of args : 3 
arg 1 : 1 
arg 2 : 2 
arg 3 : 3 
[email protected]:~/Work/playground/shpy$ ./test.sh '1 2 3' 
number of args : 1 
arg 1 : 1 2 3 

Питон версия:

import sys 

args = sys.argv[1:] 
print "number ogf args: %s" % len(args) 
for i, arg in enumerate(args, 1): 
    print "arg %s : %s" % (i, arg) 



[email protected]:~/Work/playground/shpy$ python test.py 1 2 3 
number ogf args: 3 
arg 1 : 1 
arg 2 : 2 
arg 3 : 3 
[email protected]:~/Work/playground/shpy$ python test.py '1 2 3' 
number ogf args: 1 
arg 1 : 1 2 3 

=> Если вы хотите «1 2 3" следует понимать аа один аргумент, вы должны процитировать, то есть:

<?php 
$x = '1 2 3'; 
echo shell_exec("python xyz.py '$x'"); 
?> 
+0

Работали как прелести. Спасибо Бруно. –

+0

@DevenAhluwalia: тогда не стесняйтесь принимать мой ответ. –

+0

Приложение SO mob не имеет права принимать ответы: D –

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