【发布时间】:2011-11-01 21:36:21
【问题描述】:
我有一个脚本 (a.py) 读取 2 个参数,如下所示:-
#!/usr/bin/env python
import sys
username = sys.argv[1]
password = sys.argv[2]
问题是,当我用一些特殊字符调用脚本时:-
a.py "Lionel" "my*password"
它给了我这个错误:-
/swdev/tools/python/current/linux64/bin/python: No match.
有什么解决方法吗?
更新- 有人怀疑这可能是外壳问题而不是脚本问题。 我也是这么想的,直到我在 perl 脚本(a.pl)上尝试了它,它完美地运行没有任何问题:-
#!/usr/bin/env perl
$username = $ARGV[1];
$password = $ARGV[2];
print "$username $password\n";
%a.pl "lionel" "asd*123"
==> lionel asd*123
没问题。
所以我想,这在我看来更像是一个 PYTHON 问题。
天哪……..
【问题讨论】:
-
引号应该阻止 shell 尝试将 *. a.py的shebang行是什么样子的,python实际上是安装在/swdev/tools/python/current/linux64/bin/python吗?
-
我也无法重现,你确定阅读
sys.argv时出现错误? -
由于 shell 命令可能会被记录并可供机器上的所有用户查看,因此输入密码作为命令行参数不是一个好主意。
-
绝对与 python 无关,因为 python 错误永远不会像那样。 shebang (
#!...) 可能是问题所在。 -
编辑了问题,加入了 shebang 行。是的。 python肯定安装在/swdev/tools/python/current/linux64/bin/python
标签: python perl shell parameter-passing csh