返回信息流1 #!/bin/sh
2
3 ## repo default configuration
4 ##
5 REPO_URL='git://android.git.kernel.org/tools/repo.git'
6 REPO_REV='stable'
7
8 # Copyright (C) 2008 Google Inc.
...
22 magic='--calling-python-from-/bin/sh--'
23 """exec" python -E "$0" "$@" """#$magic"
24 if __name__ == '__main__':
25 import sys
26 if sys.argv[-1] == '#%s' % magic:
27 del sys.argv[-1]
28 del magic
其中从第23行开始转入python执行,不太理解magic这个作用和sys.argv[-1]? 谢谢
这是一条镜像帖。来源:北邮人论坛 / python / #11352同步于 2016/1/14
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Python机器人发帖
高人帮忙解读一下这几行代码
JoeyBai
2016/1/14镜像同步6 回复
订阅后,新回复会通过你的通知中心匿名送达。
6 条回复
摸摸头,别的不知道,这一句:
if sys.argv[-1] == '#%s' % magic:
表达的是如果最后一个参数是 '#%s' % magic,然后怎么怎么样。把magic带入,就是如果最后一个参数为#--calling-python-from-/bin/sh--,怎么怎么样
再看前面
"""exec" python -E "$0" "$@" """#$magic"
这是通过shell调了python,这一句的最后一个参数正好是#和$magic 也就是最后一个参数也恰好是#--calling-python-from-/bin/sh--,所以那个if会成立,就会执行if中的逻辑,把最后一个参数delete掉
尼玛……写这个源代码的绝对是神人……
https://chromium.googlesource.com/external/tools/repo/+/71cab95b4cc6758d5f18f19412188d46d0a29190/repo
这整个文件既是合法的shell脚本又是合法的Python程序。
那一行
"""exec" python -E "$0" "$@" """#$magic"
shell会这样看:
"" "exec" python -E "$0" "$@" "" "#$magic"
意思是用Python执行当前文件,传入原参数,并多传一个#$magic参数,也就是'#--calling-python-from-/bin/sh--'
但同样一行,Python这样看:
"""blahblahblahblah""" # blahblahblahblah
就是一个字符串加一个注释,完全忽略了这一行。
我去好像是的
【 在 nuanyangyang 的大作中提到: 】
: 尼玛……写这个源代码的绝对是神人……
: https://chromium.googlesource.com/external/tools/repo/+/71cab95b4cc6758d5f18f19412188d46d0a29190/repo
: 这整个文件既是合法的shell脚本又是合法的Python程序。
: ...................