我有一个脚本(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.
对此有什么解决办法吗?
kwvwclae1#
问题出在你实际使用的命令上,它们与你给我们展示的命令不一样。证据:在Perl中,前两个命令行参数是$ARGV[0]和$ARGV[1](命令名是$0)。“No match”是一个shell错误消息。复制并粘贴(不要重新输入)Python脚本的 exact 内容、用于调用它的 exact 命令行以及得到的 exact 输出。还有一些需要注意的事情:您以a.py的形式调用脚本,这意味着您要么将其复制到$PATH中的某个目录,要么.在$PATH中。考虑一下如果您cd info一个包含将.放在$PATH的末尾比放在$PATH的开头更安全,但我仍然建议完全忽略它,并使用./command调用当前目录中的命令。无论如何,出于本练习的目的,请使用./a.py而不是a.py,这样我们就可以确保您没有从$PATH中的其他位置拾取另一个a.py。这是一个长镜头,但检查您是否有任何文件在您的当前目录中的名称与*字符。some_command asd*123(不带引号)将失败,如果没有匹配的文件,但如果碰巧有一个文件的名称是字面上的"asd*123"。另一个尝试:修改你的Python脚本如下:
$ARGV[0]
$ARGV[1]
$0
a.py
$PATH
.
cd
./command
./a.py
*
some_command asd*123
"asd*123"
#!/usr/bin/env python print "before import sys" import sys print "after import sys" username = sys.argv[1] password = sys.argv[2]
这将告诉您shell是否调用了您的脚本。
j9per5c42#
这个错误来自你的shell,而不是Python。你在你的.bashrc或其他地方设置了shopt -s failglob吗?
.bashrc
shopt -s failglob
qco9c6ql3#
/swdev/tools/python/current/linux64/bin/python:不匹配。我认为问题是python env没有设置:Python在你的机器上运行吗?
3条答案
按热度按时间kwvwclae1#
问题出在你实际使用的命令上,它们与你给我们展示的命令不一样。证据:在Perl中,前两个命令行参数是
$ARGV[0]
和$ARGV[1]
(命令名是$0
)。“No match”是一个shell错误消息。
复制并粘贴(不要重新输入)Python脚本的 exact 内容、用于调用它的 exact 命令行以及得到的 exact 输出。
还有一些需要注意的事情:
您以
a.py
的形式调用脚本,这意味着您要么将其复制到$PATH
中的某个目录,要么.
在$PATH
中。考虑一下如果您cd
info一个包含将.
放在$PATH
的末尾比放在$PATH
的开头更安全,但我仍然建议完全忽略它,并使用./command
调用当前目录中的命令。无论如何,出于本练习的目的,请使用./a.py
而不是a.py
,这样我们就可以确保您没有从$PATH
中的其他位置拾取另一个a.py
。这是一个长镜头,但检查您是否有任何文件在您的当前目录中的名称与
*
字符。some_command asd*123
(不带引号)将失败,如果没有匹配的文件,但如果碰巧有一个文件的名称是字面上的"asd*123"
。另一个尝试:修改你的Python脚本如下:
这将告诉您shell是否调用了您的脚本。
j9per5c42#
这个错误来自你的shell,而不是Python。你在你的
.bashrc
或其他地方设置了shopt -s failglob
吗?qco9c6ql3#
/swdev/tools/python/current/linux64/bin/python:不匹配。
我认为问题是python env没有设置:
Python在你的机器上运行吗?