“substring not found”,即使它包含在命令行传递的参数中

时间:2015-01-23 10:25:14

标签: python ubuntu

我无法弄清楚为什么会这样,所以任何帮助都会受到赞赏。

hi.py

import httplib, urlparse, sys, urllib

url = sys.argv[1]

print url
print url.index("token")
print url.index("&user")

然后在ubuntu中,如果我尝试运行类似的东西:

python hi.py http://somewebsite.com/api?token=hello_world&user=myself

我得到这个作为输出:

http://somewebsite.com/api?token=hello_world
27
Traceback (most recent call last):
  File "hi.py", line 10, in <module>
    print url.index("&user")
ValueError: substring not found

由于某种原因,整个网址没有被打印出来,我怀疑这就是找不到&amp; user子字符串的原因。有什么想法吗?

1 个答案:

答案 0 :(得分:3)

&是一个shell元字符,puts the command in the background。您需要引用您的参数,以防止&字符被解释为:

python hi.py "http://somewebsite.com/api?token=hello_world&user=myself"

或使用\反斜杠来逃避&符号:

python hi.py http://somewebsite.com/api?token=hello_world\&user=myself

否则shell将其视为两个单独的命令,user=myself巧合是有效的shell语法。

以下任何字符均为special in a shell

 \ ' " ` < > | ; <Space> <Tab> <Newline> ( ) [ ] ? # $ ^ & * =

这些需要以同样的方式逃脱; ?恰好适用于URL,因为没有匹配的文件名;如果您使用hi.p?文件名hi.py将被替换。 {I} =只需要在我认为左侧是有效的shell变量标识符时转义,但为了安全起见我会坚持引用整个URL。