参考https://github.com/noxrepo/pox/blob/carp/pox.py
我想知道4个撇号是什么意思?它看起来不像是在注释,在代码的末尾还有3个撇号。有人能帮我解释一下下面的代码吗?在
#!/bin/sh -
''''true
#export OPT="-u -O"
export OPT="-u"
export FLG=""
if [ "$(basename $0)" = "debug-pox.py" ]; then
export OPT=""
export FLG="--debug"
fi
if [ -x pypy/bin/pypy ]; then
exec pypy/bin/pypy $OPT "$0" $FLG "$@"
fi
if type python2.7 > /dev/null 2> /dev/null; then
exec python2.7 $OPT "$0" $FLG "$@"
fi
exec python $OPT "$0" $FLG "$@"
'''
from pox.boot import boot
if __name__ == '__main__':
boot()
这个文件可以作为shell脚本和Python脚本执行。注意shebang是
#!/bin/sh
,因此脚本首先要作为shell脚本运行。(我忽略了-
参数,它表示sh
应该从标准输入而不是文件中读取。我不太清楚它在这里有什么意义,因为我从来没有见过一个舍邦是这样写的。)预期的调用类似于}
./pox.py ...
或{脚本的第一行是
''''true
,在删除引号之后,它与true
相同,因此命令运行并且除了成功退出之外什么都不做。以下几行是确定使用哪个Python解释器以及传递给调用的选项的有效命令。三个exec
命令之一exec pypy/bin/pypy $OPT "$0" $FLG "$@"
exec python2.7 $OPT "$0" $FLG "$@"
exec python $OPT "$0" $FLG "$@"
然后将执行与Python脚本相同的文件,因此shell永远看不到以第二个
'''
开头的行(这很好,因为第一个'
开头的单词既没有以最后一个结束符'
终止,如果字符串的被终止,则它也不是有效的命令)。"$0"
是当前文件的名称,"$@"
表示脚本的参数(除了传递给Python脚本之外,shell脚本将忽略这些参数,如下所示)。在一旦脚本作为Python脚本运行,以
''''true
开头的行将被简单地视为将被忽略的doc字符串的开头。Python脚本本身就是为什么这一切都要从
''''true
开始?作为shell脚本,需要有偶数个引号来平衡彼此。但是,''''
本身就是一个空字符串,shell会尝试将其视为命令,并且没有任何命令的名称是空字符串。''''true
但是,确实会产生一个有效的命令。在总体答案
前三个撇号开始一个多行字符串。下一个撇号只是字符串内容的一部分。在
检查结果
脚本将字符串存储在变量中。在与
python -i pox.py
交互运行代码后,很容易直接看到解析的docstring:注意第四个撇号是如何作为docstring的一部分保留的。在
细节
根据tokenize模块,下面是Python如何查看上述代码:
^{pr2}$标记化脚本
下面是一个python2.7脚本,它标记痘.py脚本:
相关问题 更多 >
编程相关推荐