Skip to main content
 首页 » 编程设计

python之在 Python 中读取带有特殊字符的参数时出现问题

2025年05月04日11bluestorm

我有一个脚本 (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 是否正在调用您的脚本。