不打印的Python用法
我正在创建我的第一个python应用程序,我遇到了参数问题或缺少参数。如果我执行没有参数的脚本,我希望看到一条说明用法的消息,但是我得到了以下错误 错误 好的,谢谢大家的评论和指点。ZMO我要用docopt,它看起来像我一样干净简单。我不完全确定我需要对我的旧代码做什么,所以我上传了我认为我需要做的事情。有人能告诉我这是不是正确的方向吗? 现在如何处理def main?及 geptopt在现代python中已被弃用,您应该改用它。我个人更喜欢第三方 将sys.argv数组作为参数提供给main是没有用的,因为您在模块上下文中全局导入sys模块,并且除了argv之外,您还可以从sys使用许多其他东西。只有在if\uuu name\uuuu==\uuuu\u main\uuuu中进行导入时,代码才有意义,但这不是好的python实践。更好的做法是实际解析参数,然后将返回的作为参数提供给main。 Argparse示例 docopt示例 geptopt在现代python中已被弃用,您应该改用它。我个人更喜欢第三方 将sys.argv数组作为参数提供给main是没有用的,因为您在模块上下文中全局导入sys模块,并且除了argv之外,您还可以从sys使用许多其他东西。只有在if\uuu name\uuuu==\uuuu\u main\uuuu中进行导入时,代码才有意义,但这不是好的python实践。更好的做法是实际解析参数,然后将返回的作为参数提供给main。 Argparse示例 docopt示例不打印的Python用法,python,Python,我正在创建我的第一个python应用程序,我遇到了参数问题或缺少参数。如果我执行没有参数的脚本,我希望看到一条说明用法的消息,但是我得到了以下错误 错误 好的,谢谢大家的评论和指点。ZMO我要用docopt,它看起来像我一样干净简单。我不完全确定我需要对我的旧代码做什么,所以我上传了我认为我需要做的事情。有人能告诉我这是不是正确的方向吗? 现在如何处理def main?及 geptopt在现代python中已被弃用,您应该改用它。我个人更喜欢第三方 将sys.argv数组作为参数提供给main是
不应将argv作为参数发送到main。这不是C/C++,应该考虑使用OPTPARSE;例如,optparse在处理所需参数方面非常稀少。@JayanthKoushik为什么不呢?如果你没有嫁给stdlib,我会用它来代替。对非常量使用ALL_CAPS名称也是很糟糕的风格;任何以后需要维护代码的人都会讨厌你。你不应该将argv作为参数发送给main。这不是C/C++,应该考虑使用OPTPARSE;例如,optparse在处理所需参数方面非常稀少。@JayanthKoushik为什么不呢?如果你没有嫁给stdlib,我会用它来代替。对非常量使用ALL_CAPS名称也是很糟糕的风格;任何以后需要维护代码的人都会讨厌你。谢谢,你能解释一下为什么你导入argparse并在if\uu name\uuuu=\uuuu main\uuu:下定义它,而不是在def main中吗?因为if\uu name\uuuu==\uu main\uuuu部分只在作为独立脚本运行时执行,而不是在作为库包含它时执行。因此,基本上,它避免了无用的导入,以防您将脚本作为库导入,因为您可能不希望通过该模块解析参数,但是,您可能希望通过脚本导入模块来为主函数提供剩余参数。谈到我所知道的最糟糕的反模式,可以看出我刚才所说的重要原因,就是参数解析如何成为技术债务,阻碍了任何希望将其作为库包含的项目。基本上,如果要控制命令行解析,则必须从sys.argv获取参数,并在导入该库之前将其清理干净。:/im fuzzle lol那么我是否应该像您那样进行所有导入,而不是在脚本顶部?sozs我是一个nooobt这方面没有规则,好的实践来自于阅读他人代码和实验的经验。但是我给你的建议是,除非你知道并理解你在做什么,否则总是全局导入。谢谢,你能解释一下为什么导入argparse并在if\uuu name\uuuu=\uu main\uuuu:下定义它,而不是在def main中吗?因为if\uu name\uuuu==\uu main\uuuu部分只有在独立运行脚本时才会执行,如果你把它作为一个图书馆的话就不会了。因此,基本上,它避免了无用的导入,以防您将脚本作为库导入,因为您可能不希望通过该模块解析参数,但是,您可能希望通过脚本导入模块来为主函数提供剩余参数。谈到我所知道的最糟糕的反模式,可以看出我刚才所说的重要原因,就是参数解析如何成为技术债务,阻碍了任何希望将其作为库包含的项目。基本上,如果要控制命令行解析,则必须从sys.argv获取参数,并在导入该库之前将其清理干净。:/im fuzzle lol那么我是否应该像您那样进行所有导入,而不是在脚本顶部?sozs我是一个nooobt这方面没有规则,好的实践来自于阅读他人代码和实验的经验。但我给你们的建议是,除非你们知道并理解自己在做什么,否则要始终在全球范围内进口。
unknown@ubuntu:~$ ./attack.py
Traceback (most recent call last):
File "./attack.py", line 60, in <module>
main(sys.argv[1:])
File "./attack.py", line 57, in main
print fread(FWORD)
File "./attack.py", line 19, in fread
flist = open(FWORD).readlines()
TypeError: coercing to Unicode: need string or buffer, NoneType found
#!/usr/bin/python
import sys, getopt, socket, fileinput, traceback
from Queue import Queue
from threading import Thread
def usage():
print "-h --help: help\n"
print "-f --file: File to read potential Sub-domains from.\n"
print "-p --PROXY: PROXY address and port. e.g http://192.168.1.64:8080\n"
print "-d --DOMAIN: DOMAIN to bruteforce.\n"
print "-t --thread: Thread count.\n"
print "-e: Turn debug on.\n"
sys.exit()
def fread(FWORD, *args):
flist = open(FWORD).readlines()
return flist
#def addcheck(fcontent):
def main(argv):
PROXY = None
DOMAIN = None
FWORD= None
try:
opts, argv =getopt.getopt(argv, "h:f:p:d:t:e",["help", "file=", "PROXY=", "DOMAIN=", "thread="])
except getopt.GetoptError as err:
print str(err)
usage()
sys.exit(2)
for opt, arg in opts:
if opt in ("-h", "--help"):
usage()
sys.exit()
elif opt in ("-f", "--file"):
FWORD = arg
elif opt in ("-p", "--PROXY"):
PROXY = arg
elif opt in ("-d", "--DOMAIN"):
DOMAIN = arg
elif opt in ("-t", "--thread"):
thread = arg
elif opt in '-e':
global _debug
_debug = 1
else:
usage()
sys.exit()
print fread(FWORD)
if __name__ == "__main__":
main(sys.argv[1:])
#!/usr/bin/python
import sys, getopt, socket, fileinput, traceback
from Queue import Queue
from threading import Thread
def fread(FWORD, *args):
flist = open(FWORD).readlines()
return flist
def main(argv):
"""
Usage:
your_script.py [-f <file>] [-p <proxy>] [-d <domain>] [-t] [-v]
your_script.py -h | --help
Options:
-h --help Show this screen.
-f --file File to read potential Sub-domains from.
-p --proxy Proxy address and port. [default: http://127.0.0.1:8080]
-d --domain Domain to bruteforce.
-t --thread Thread count.
-v --verbose Turn debug on.
"""
# […] your code (NOT SURE WHAT CODE YOU MEAN?
if __name__ == "__main__":
from docopt import docopt
arguments = docopt(__doc__, version='0.1a')
print fread(FWORD)
# […] your code
if __name__ == "__main__":
import argparse
parser = argparse.ArgumentParser(description='Your script.')
parser.add_argument('--file', '-f', metavar='FILE', dest='file', type=file,
help='File to read potential Sub-domains from.')
parser.add_argument('--proxy', '-p', dest='proxy', action='store',
help='Proxy address and port.', default='http://127.0.0.1:8080')
parser.add_argument('--domain', '-d', dest='domain', action='store',
help='Domain to bruteforce.')
parser.add_argument('--thread', '-t', dest='thread', action='store_true',
help='Thread count.')
parser.add_argument('--verbose', '-v', dest='verbose', action='store_true',
help='Turn debug on.')
args = parser.parse_args()
main(args)
Your script presentation.
"""
Usage:
your_script.py [-f <file>] [-p <proxy>] [-d <domain>] [-t] [-v]
your_script.py -h | --help
Options:
-h --help Show this screen.
-f --file File to read potential Sub-domains from.
-p --proxy Proxy address and port. [default: http://127.0.0.1:8080]
-d --domain Domain to bruteforce.
-t --thread Thread count.
-v --verbose Turn debug on.
"""
# […] your code
if __name__ == "__main__":
from docopt import docopt
arguments = docopt(__doc__, version='Naval Fate 2.0')
main(arguments) # here using the parameter makes sense ;-)