Use /usr/bin/env python for virtualenv (#1025)
This helps with virtualenv although it can open up another security hole if you end up using an unexpected python interpreter. Overall it seems to make sense to err on the side of usability but it's good to be aware of security. However, for the remaining utility scripts that require python 2, we explicitly note this with #!/usr/bin/python2.
This commit is contained in:
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Mininet runner
|
Mininet runner
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"This example doesn't use OpenFlow, but attempts to run sshd in a namespace."
|
"This example doesn't use OpenFlow, but attempts to run sshd in a namespace."
|
||||||
|
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
bind.py: Bind mount example
|
bind.py: Bind mount example
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cluster.py: prototyping/experimentation for distributed Mininet,
|
cluster.py: prototyping/experimentation for distributed Mininet,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"CLI for Mininet Cluster Edition prototype demo"
|
"CLI for Mininet Cluster Edition prototype demo"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"clusterdemo.py: demo of Mininet Cluster Edition prototype"
|
"clusterdemo.py: demo of Mininet Cluster Edition prototype"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"clusterperf.py compare the maximum throughput between SSH and GRE tunnels"
|
"clusterperf.py compare the maximum throughput between SSH and GRE tunnels"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
consoles.py: bring up a bunch of miniature consoles on a virtual network
|
consoles.py: bring up a bunch of miniature consoles on a virtual network
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Create a network where different switches are connected to
|
Create a network where different switches are connected to
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This example creates a multi-controller network from semi-scratch by
|
This example creates a multi-controller network from semi-scratch by
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
controlnet.py: Mininet with a custom control network
|
controlnet.py: Mininet with a custom control network
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
cpu.py: test iperf bandwidth for varying cpu limits
|
cpu.py: test iperf bandwidth for varying cpu limits
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This example shows how to create an empty Mininet object
|
This example shows how to create an empty Mininet object
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This example shows how to add an interface (for example a real
|
This example shows how to add an interface (for example a real
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
'''
|
'''
|
||||||
example of using various TCIntf options.
|
example of using various TCIntf options.
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
limit.py: example of using link and CPU limits
|
limit.py: example of using link and CPU limits
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Test bandwidth (using iperf) on linear networks of varying size,
|
Test bandwidth (using iperf) on linear networks of varying size,
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
linuxrouter.py: Example network with Linux IP router
|
linuxrouter.py: Example network with Linux IP router
|
||||||
|
|||||||
@@ -1704,7 +1704,7 @@ class MiniEdit( Frame ):
|
|||||||
# debug( "Now saving under %s\n" % fileName )
|
# debug( "Now saving under %s\n" % fileName )
|
||||||
f = open(fileName, 'wb')
|
f = open(fileName, 'wb')
|
||||||
|
|
||||||
f.write("#!/usr/bin/python\n")
|
f.write("#!/usr/bin/env python\n")
|
||||||
f.write("\n")
|
f.write("\n")
|
||||||
f.write("from mininet.net import Mininet\n")
|
f.write("from mininet.net import Mininet\n")
|
||||||
f.write("from mininet.node import Controller, RemoteController, OVSController\n")
|
f.write("from mininet.node import Controller, RemoteController, OVSController\n")
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Simple example of Mobility with Mininet
|
Simple example of Mobility with Mininet
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This is a simple example that demonstrates multiple links
|
This is a simple example that demonstrates multiple links
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
multiping.py: monitor multiple sets of hosts using ping
|
multiping.py: monitor multiple sets of hosts using ping
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Simple example of sending output to multiple files and
|
Simple example of sending output to multiple files and
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This example shows how to create a network and run multiple tests.
|
This example shows how to create a network and run multiple tests.
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Example to create a Mininet topology and connect it to the internet via NAT
|
Example to create a Mininet topology and connect it to the internet via NAT
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
natnet.py: Example network with NATs
|
natnet.py: Example network with NATs
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Create a network with 5 hosts, numbered 1-4 and 9.
|
Create a network with 5 hosts, numbered 1-4 and 9.
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
This example monitors a number of hosts using host.popen() and
|
This example monitors a number of hosts using host.popen() and
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"Monitor multiple hosts using popen()/pmonitor()"
|
"Monitor multiple hosts using popen()/pmonitor()"
|
||||||
|
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Build a simple network from scratch, using mininet primitives.
|
Build a simple network from scratch, using mininet primitives.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Build a simple network from scratch, using mininet primitives.
|
Build a simple network from scratch, using mininet primitives.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Simple example of setting network and CPU parameters
|
Simple example of setting network and CPU parameters
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Create a network and start sshd(8) on each host.
|
Create a network and start sshd(8) on each host.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Create a 1024-host network, and run the CLI on it.
|
Create a 1024-host network, and run the CLI on it.
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
"Create a 64-node tree network, and test connectivity using ping."
|
"Create a 64-node tree network, and test connectivity using ping."
|
||||||
|
|
||||||
|
|||||||
+1
-5
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python2
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Convert simple documentation to epydoc/pydoctor-compatible markup
|
Convert simple documentation to epydoc/pydoctor-compatible markup
|
||||||
@@ -83,7 +83,3 @@ if __name__ == '__main__':
|
|||||||
infile.close()
|
infile.close()
|
||||||
os.close( outfid )
|
os.close( outfid )
|
||||||
call( [ 'doxypy', outname ] )
|
call( [ 'doxypy', outname ] )
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
+15
-15
@@ -1,7 +1,7 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/python2
|
||||||
|
|
||||||
"""
|
"""
|
||||||
Translate from PEP8 Python style to Mininet (i.e. Arista-like)
|
Translate from PEP8 Python style to Mininet (i.e. Arista-like)
|
||||||
Python style
|
Python style
|
||||||
|
|
||||||
usage: unpep8 < old.py > new.py
|
usage: unpep8 < old.py > new.py
|
||||||
@@ -51,7 +51,7 @@ def fixUnderscoreTriplet( match ):
|
|||||||
def reinstateCapWords( text ):
|
def reinstateCapWords( text ):
|
||||||
underscoreTriplet = re.compile( r'[A-Za-z0-9]_[A-Za-z0-9]' )
|
underscoreTriplet = re.compile( r'[A-Za-z0-9]_[A-Za-z0-9]' )
|
||||||
return underscoreTriplet.sub( fixUnderscoreTriplet, text )
|
return underscoreTriplet.sub( fixUnderscoreTriplet, text )
|
||||||
|
|
||||||
def replaceTripleApostrophes( text ):
|
def replaceTripleApostrophes( text ):
|
||||||
"Replace triple apostrophes with triple quotes."
|
"Replace triple apostrophes with triple quotes."
|
||||||
return text.replace( "'''", '"""')
|
return text.replace( "'''", '"""')
|
||||||
@@ -60,7 +60,7 @@ def simplifyTripleQuotes( text ):
|
|||||||
"Fix single-line doc strings."
|
"Fix single-line doc strings."
|
||||||
r = re.compile( r'"""([^\"\n]+)"""' )
|
r = re.compile( r'"""([^\"\n]+)"""' )
|
||||||
return r.sub( r'"\1"', text )
|
return r.sub( r'"\1"', text )
|
||||||
|
|
||||||
def insertExtraSpaces( text ):
|
def insertExtraSpaces( text ):
|
||||||
"Insert extra spaces inside of parentheses and brackets/curly braces."
|
"Insert extra spaces inside of parentheses and brackets/curly braces."
|
||||||
lparen = re.compile( r'\((?![\s\)])' )
|
lparen = re.compile( r'\((?![\s\)])' )
|
||||||
@@ -76,9 +76,9 @@ def insertExtraSpaces( text ):
|
|||||||
lcurly = re.compile( r'\{(?![\s\}])' )
|
lcurly = re.compile( r'\{(?![\s\}])' )
|
||||||
text = lcurly.sub( r'{ ', text )
|
text = lcurly.sub( r'{ ', text )
|
||||||
rcurly = re.compile( r'([^\s\{])(?=\})' )
|
rcurly = re.compile( r'([^\s\{])(?=\})' )
|
||||||
text = rcurly.sub( r'\1 ', text)
|
text = rcurly.sub( r'\1 ', text)
|
||||||
return text
|
return text
|
||||||
|
|
||||||
def fixDoxygen( text ):
|
def fixDoxygen( text ):
|
||||||
"""Translate @param foo to foo:, @return bar to returns: bar, and
|
"""Translate @param foo to foo:, @return bar to returns: bar, and
|
||||||
@author me to author: me"""
|
@author me to author: me"""
|
||||||
@@ -96,11 +96,11 @@ def removeCommentFirstBlankLine( text ):
|
|||||||
"Remove annoying blank lines after first line in comments."
|
"Remove annoying blank lines after first line in comments."
|
||||||
line = re.compile( r'("""[^\n]*\n)\s*\n', re.MULTILINE )
|
line = re.compile( r'("""[^\n]*\n)\s*\n', re.MULTILINE )
|
||||||
return line.sub( r'\1', text )
|
return line.sub( r'\1', text )
|
||||||
|
|
||||||
def fixArgs( match, kwarg = re.compile( r'(\w+) = ' ) ):
|
def fixArgs( match, kwarg = re.compile( r'(\w+) = ' ) ):
|
||||||
"Replace foo = bar with foo=bar."
|
"Replace foo = bar with foo=bar."
|
||||||
return kwarg.sub( r'\1=', match.group() )
|
return kwarg.sub( r'\1=', match.group() )
|
||||||
|
|
||||||
def fixKeywords( text ):
|
def fixKeywords( text ):
|
||||||
"Change keyword argumentsfrom foo = bar to foo=bar."
|
"Change keyword argumentsfrom foo = bar to foo=bar."
|
||||||
args = re.compile( r'\(([^\)]+)\)', re.MULTILINE )
|
args = re.compile( r'\(([^\)]+)\)', re.MULTILINE )
|
||||||
@@ -115,7 +115,7 @@ def fixKeywords( text ):
|
|||||||
def lineIter( text ):
|
def lineIter( text ):
|
||||||
"Simple iterator over lines in text."
|
"Simple iterator over lines in text."
|
||||||
for line in text.splitlines(): yield line
|
for line in text.splitlines(): yield line
|
||||||
|
|
||||||
def stringIter( strList ):
|
def stringIter( strList ):
|
||||||
"Yield strings in strList."
|
"Yield strings in strList."
|
||||||
for s in strList: yield s
|
for s in strList: yield s
|
||||||
@@ -134,7 +134,7 @@ def restoreRegex( regex, old, new ):
|
|||||||
# This is a cheap hack, and it may not work 100%, since
|
# This is a cheap hack, and it may not work 100%, since
|
||||||
# it doesn't handle multiline strings.
|
# it doesn't handle multiline strings.
|
||||||
# However, it should be mostly harmless...
|
# However, it should be mostly harmless...
|
||||||
|
|
||||||
def restoreStrings( oldText, newText ):
|
def restoreStrings( oldText, newText ):
|
||||||
"Restore strings from oldText into newText, returning result."
|
"Restore strings from oldText into newText, returning result."
|
||||||
oldLines, newLines = lineIter( oldText ), lineIter( newText )
|
oldLines, newLines = lineIter( oldText ), lineIter( newText )
|
||||||
@@ -149,13 +149,13 @@ def restoreStrings( oldText, newText ):
|
|||||||
newLine = restoreRegex( tickStrings, oldLine, newLine )
|
newLine = restoreRegex( tickStrings, oldLine, newLine )
|
||||||
result += newLine + '\n'
|
result += newLine + '\n'
|
||||||
return result
|
return result
|
||||||
|
|
||||||
# This might be slightly controversial, since it uses
|
# This might be slightly controversial, since it uses
|
||||||
# three spaces to line up multiline comments. However,
|
# three spaces to line up multiline comments. However,
|
||||||
# I much prefer it. Limitations: if you have deeper
|
# I much prefer it. Limitations: if you have deeper
|
||||||
# indents in comments, they will be eliminated. ;-(
|
# indents in comments, they will be eliminated. ;-(
|
||||||
|
|
||||||
def fixComment( match,
|
def fixComment( match,
|
||||||
indentExp=re.compile( r'\n([ ]*)(?=[^/s])', re.MULTILINE ),
|
indentExp=re.compile( r'\n([ ]*)(?=[^/s])', re.MULTILINE ),
|
||||||
trailingQuotes=re.compile( r'\s+"""' ) ):
|
trailingQuotes=re.compile( r'\s+"""' ) ):
|
||||||
"Re-indent comment, and join trailing quotes."
|
"Re-indent comment, and join trailing quotes."
|
||||||
@@ -166,17 +166,17 @@ def fixComment( match,
|
|||||||
if len( originalIndent ) is not 0: indent += ' '
|
if len( originalIndent ) is not 0: indent += ' '
|
||||||
comment = indentExp.sub( indent, comment )
|
comment = indentExp.sub( indent, comment )
|
||||||
return originalIndent + trailingQuotes.sub( '"""', comment )
|
return originalIndent + trailingQuotes.sub( '"""', comment )
|
||||||
|
|
||||||
def fixCommentIndents( text ):
|
def fixCommentIndents( text ):
|
||||||
"Fix multiline comment indentation."
|
"Fix multiline comment indentation."
|
||||||
comments = re.compile( r'^([ ]*)("""[^"]*""")$', re.MULTILINE )
|
comments = re.compile( r'^([ ]*)("""[^"]*""")$', re.MULTILINE )
|
||||||
return comments.sub( fixComment, text )
|
return comments.sub( fixComment, text )
|
||||||
|
|
||||||
def removeBogusLinefeeds( text ):
|
def removeBogusLinefeeds( text ):
|
||||||
"Remove extra linefeeds at the end of single-line comments."
|
"Remove extra linefeeds at the end of single-line comments."
|
||||||
bogusLfs = re.compile( r'"([^"\n]*)\n"', re.MULTILINE )
|
bogusLfs = re.compile( r'"([^"\n]*)\n"', re.MULTILINE )
|
||||||
return bogusLfs.sub( '"\1"', text)
|
return bogusLfs.sub( '"\1"', text)
|
||||||
|
|
||||||
def convertFromPep8( program ):
|
def convertFromPep8( program ):
|
||||||
oldProgram = program
|
oldProgram = program
|
||||||
# Program text transforms
|
# Program text transforms
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python
|
#!/usr/bin/env python
|
||||||
|
|
||||||
from subprocess import check_output as co
|
from subprocess import check_output as co
|
||||||
from sys import exit, version_info
|
from sys import exit, version_info
|
||||||
|
|||||||
+1
-1
@@ -1,4 +1,4 @@
|
|||||||
#!/usr/bin/python2.7
|
#!/usr/bin/python2
|
||||||
|
|
||||||
"""
|
"""
|
||||||
build.py: build a Mininet VM
|
build.py: build a Mininet VM
|
||||||
|
|||||||
Reference in New Issue
Block a user