shell 在Python中阅读带有特殊字符的参数时出现问题

swvgeqrz  于 2023-03-30  发布在  Shell
关注(0)|答案(3)|浏览(99)

我有一个脚本(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.

对此有什么解决办法吗?

kwvwclae

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脚本如下:

#!/usr/bin/env python

print "before import sys"

import sys

print "after import sys"

username = sys.argv[1]
password = sys.argv[2]

这将告诉您shell是否调用了您的脚本。

j9per5c4

j9per5c42#

这个错误来自你的shell,而不是Python。你在你的.bashrc或其他地方设置了shopt -s failglob吗?

qco9c6ql

qco9c6ql3#

/swdev/tools/python/current/linux64/bin/python:不匹配。
我认为问题是python env没有设置:
Python在你的机器上运行吗?

相关问题