将复杂参数从php传递给python

时间:2014-11-28 15:08:44

标签: 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:]会占用{{1}之后的所有内容作为单个参数

另一种可能的解决方案是使用静态分隔符,如argv[1],在PHP中用#替换空格,然后用空格替换#。这将有效,但这是解决问题的一种简单方法。

那么,还有其他解决办法吗?

1 个答案:

答案 0 :(得分:0)

这是shell的东西,而不是特定的python(或php)... bash脚本版本:

#!/bin/bash

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


bruno@bigb:~/Work/playground/shpy$ ./test.sh 1 2 3
number of args : 3
arg 1 : 1
arg 2 : 2
arg 3 : 3
bruno@bigb:~/Work/playground/shpy$ ./test.sh '1 2 3'
number of args : 1
arg 1 : 1 2 3

Python版本:

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)



bruno@bigb:~/Work/playground/shpy$ python test.py 1 2 3
number ogf args: 3
arg 1 : 1
arg 2 : 2
arg 3 : 3
bruno@bigb:~/Work/playground/shpy$ python test.py '1 2 3'
number ogf args: 1
arg 1 : 1 2 3

=&GT;如果你想要将“1 2 3”理解为一个参数,你必须引用它,即:

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