问题在于:
<?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中用#
替换空格,然后用空格替换#
。这将有效,但这是解决问题的一种简单方法。
那么,还有其他解决办法吗?
答案 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'");
?>