我有一个脚本(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.
对此有何解决方法?
更新 - 人们怀疑这可能是一个shell问题,而不是脚本问题。 我也这么认为,直到我在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问题。
Geezzz ........
答案 0 :(得分:1)
问题在于您实际使用的命令,这些命令与您向我们展示的命令不同。证据:在Perl中,前两个命令行参数是$ARGV[0]
和$ARGV[1]
(命令名称为$0
)。您向我们展示的Perl脚本不会产生您向我们展示的输出。
“不匹配”是shell错误消息。
复制并粘贴(不要重新输入)Python脚本的完全内容,用于调用它的完全命令行,以及确切的输出。
还有一些需要注意的事项:
您正在以a.py
方式调用脚本,这意味着您要将其复制到$PATH
中的某个目录,或者.
位于您的$PATH
中}。如果是后者,那是个坏主意;考虑如果cd
信息包含名为ls
的(可能是恶意的)命令的目录,会发生什么。将.
放在$PATH
的末尾比将它放在开头更安全,但我仍然建议完全不使用它,并使用./command
来调用当前目录中的命令。在任何情况下,为了本练习的目的,请使用./a.py
而不是a.py
,这样我们就可以确保您没有从{{1}的其他位置获取另一个a.py
}}
这是一个很长的镜头,但请检查当前目录中是否有任何名称中包含$PATH
字符的文件。如果没有匹配的文件,*
(不带引号)将失败,但如果恰好是名称为some_command asd*123
的文件则不会失败。
要尝试的另一件事:更改Python脚本如下:
"asd*123"
这将告诉你shell是否正在调用你的脚本。
答案 1 :(得分:0)
该错误来自您的shell,而不是来自Python。您在shopt -s failglob
或某个地方设置了.bashrc
吗?
答案 2 :(得分:0)
/ swdev / tools / python / current / linux64 / bin / python:不匹配。
我认为问题是没有设置python env:
你的机器上是否运行python?