我有一个脚本 (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 中,前两个命令行参数是 $ARGV[0] 和 $ARGV[1](命令名称是 $0).您向我们展示的 Perl 脚本不会产生您向我们展示的输出。
“不匹配”是一个 shell 错误信息。
复制并粘贴(不要重新键入)您的 Python 脚本的确切内容、您用来调用它的确切命令行,以及精确你得到的输出。
还有一些需要注意的事情:
您将脚本作为 a.py 调用,这意味着您正在将它复制到 $PATH 中的某个目录,或者 . 在您的 $PATH 中。如果是后者,那是个坏主意;考虑一下如果您 cd info 包含一个名为 ls 的(可能是恶意的)命令的目录会发生什么。将 . 放在 $PATH 的末尾比放在开头更安全,但我仍然建议完全不使用它并使用 ./command 调用当前目录中的命令。在任何情况下,出于本练习的目的,请使用 ./a.py 而不是 a.py,这样我们就可以确保您不会选择另一个a.py 来自 $PATH 中的其他地方。
这不太可能,但请检查您当前目录中是否有名称中包含 * 字符的文件。如果没有匹配的文件,some_command asd*123(不带引号)将失败,但如果碰巧有一个名称为 "asd*123" 的文件则不会.
另一件事要尝试:按如下方式更改您的 Python 脚本:
#!/usr/bin/env python
print "before import sys"
import sys
print "after import sys"
username = sys.argv[1]
password = sys.argv[2]
这将告诉您 shell 是否正在调用您的脚本。
