python 脚本调用 -h 或 --help 如果没有选择任何选项
python script envoke -h or --help if no options are chosen
为了让我的脚本更通用,所以我添加了一些标志。我的问题是,显然,只有在您键入 -h 时,帮助才有效。我想在没有选择标志时调用 -h。
例如:
python 0_log_cleaner.py
Traceback (most recent call last):
File "0_log_cleaner.py", line 51, in <module>
getFiles(options.path,options.org_phrase,options.new_phrase,options.org_AN,options.new_AN,options.dst_path)
File "0_log_cleaner.py", line 37, in getFiles
for filename in os.listdir(path):
TypeError: coercing to Unicode: need string or buffer, NoneType found
但是如果我添加 -h 我得到:
python 0_log_cleaner.py -h
用法:示例:
python 0_log_cleaner.py --sp original_logs/ --dp clean_logs/ --od CNAME --nd New_CNAME --oan 10208 --nan NewAN
Options:
-h, --help show this help message and exit
--sp=PATH Path to the source logs ie original_logs/
--dp=DST_PATH Path to where sanitized logs will be written to ie
clean_logs
--od=ORG_PHRASE original domain name ie www.clientName.com, use the command
-od clientName
--nd=NEW_PHRASE domain name to replace -od. ie -od clientName -nd domain
makes all log that use to be www.clientName.com into
www.domain.com
--oan=ORG_AN original AN number
--nan=NEW_AN AN number to replace original. ie -oan 12345 -nan AAAA1
replaces all instances of the AN number 12345 with AAAA1
编辑 3 个答案
生成 ^
的代码示例
import argparse
import sys
usage = "Description of function"
parser = argparse.ArgumentParser(description=usage)
parser.add_argument("--sp", dest="path", help='Path to the source logs ie logs/')
...
...(additional add arugments)
args = parser.parse_args()
def getFiles(path,org_phrase,new_phrase,org_AN,new_AN,dst_path):
if not len(sys.argv) > 1:
parser.print_help()
else:
run your logic
在不知道您使用的解析方法的情况下,我将假设以下内容(如果我错了请评论我或使用一些关于您如何处理解析的代码编辑您的问题):
- 您正在解析所有内容并将其放入变量中。让
parsed
成为那个变量。
- 您正在检查
parsed
是否存在任何选项标志。
您可能没有检查参数 不存在 :
parsed = '' <- empty string
# or if you are using a list:
# parsed = []
if parsed: <- if parsed is not empty ("" or []) returns true
Do your stuff here, because you have options now
else: <- Differently options were not provided
Invoke the same method that you invoke when the option is -h
另外,正如@dhke 所建议的,如果您还没有使用 argparse,请考虑使用它!
编辑#1:
针对您的具体情况进行翻译:
args = parser.parse_args() <-- ending line of your provided code
if not args:
parser.print_help()
else:
Do your stuff
从这里借来的:Argparse: Check if any arguments have been passed
最终代码如下所示:
import argparse
import sys
usage = "Description of function"
parser = argparse.ArgumentParser(description=usage)
parser.add_argument("--sp", dest="path", help='Path to the source logs ie logs/')
...
...(additional add arugments)
args = parser.parse_args()
def getFiles(path,org_phrase,new_phrase,org_AN,new_AN,dst_path):
if not len(sys.argv) > 1:
parser.print_help()
else:
run your logic
如果有人仍然对(非常简单的)解决方案感兴趣:
parser = argparse.ArgumentParser()
parser.add_argument("jfile", type=str, help="Give the JSON file name.")
parser.add_argument("--output", type=str, help="Type in the final excel files name.")
try:
args = parser.parse_args()
return args
except:
parser.print_help()
我的教授希望脚本即使在参数太少的情况下也能强制显示 -h / --help 页面。而不是像 "python SCRIPT.py -h" 那样。
所以我在这里所做的就像:"Try to parse the arguments. And if it works, give them back to the main methode. Otherwise, if you fail (except), print the help(). Okay? Nice"。 ;)
为了让我的脚本更通用,所以我添加了一些标志。我的问题是,显然,只有在您键入 -h 时,帮助才有效。我想在没有选择标志时调用 -h。
例如:
python 0_log_cleaner.py
Traceback (most recent call last):
File "0_log_cleaner.py", line 51, in <module>
getFiles(options.path,options.org_phrase,options.new_phrase,options.org_AN,options.new_AN,options.dst_path)
File "0_log_cleaner.py", line 37, in getFiles
for filename in os.listdir(path):
TypeError: coercing to Unicode: need string or buffer, NoneType found
但是如果我添加 -h 我得到:
python 0_log_cleaner.py -h
用法:示例:
python 0_log_cleaner.py --sp original_logs/ --dp clean_logs/ --od CNAME --nd New_CNAME --oan 10208 --nan NewAN
Options:
-h, --help show this help message and exit
--sp=PATH Path to the source logs ie original_logs/
--dp=DST_PATH Path to where sanitized logs will be written to ie
clean_logs
--od=ORG_PHRASE original domain name ie www.clientName.com, use the command
-od clientName
--nd=NEW_PHRASE domain name to replace -od. ie -od clientName -nd domain
makes all log that use to be www.clientName.com into
www.domain.com
--oan=ORG_AN original AN number
--nan=NEW_AN AN number to replace original. ie -oan 12345 -nan AAAA1
replaces all instances of the AN number 12345 with AAAA1
编辑 3 个答案 生成 ^
的代码示例import argparse
import sys
usage = "Description of function"
parser = argparse.ArgumentParser(description=usage)
parser.add_argument("--sp", dest="path", help='Path to the source logs ie logs/')
...
...(additional add arugments)
args = parser.parse_args()
def getFiles(path,org_phrase,new_phrase,org_AN,new_AN,dst_path):
if not len(sys.argv) > 1:
parser.print_help()
else:
run your logic
在不知道您使用的解析方法的情况下,我将假设以下内容(如果我错了请评论我或使用一些关于您如何处理解析的代码编辑您的问题):
- 您正在解析所有内容并将其放入变量中。让
parsed
成为那个变量。 - 您正在检查
parsed
是否存在任何选项标志。
您可能没有检查参数 不存在 :
parsed = '' <- empty string
# or if you are using a list:
# parsed = []
if parsed: <- if parsed is not empty ("" or []) returns true
Do your stuff here, because you have options now
else: <- Differently options were not provided
Invoke the same method that you invoke when the option is -h
另外,正如@dhke 所建议的,如果您还没有使用 argparse,请考虑使用它!
编辑#1: 针对您的具体情况进行翻译:
args = parser.parse_args() <-- ending line of your provided code
if not args:
parser.print_help()
else:
Do your stuff
从这里借来的:Argparse: Check if any arguments have been passed
最终代码如下所示:
import argparse
import sys
usage = "Description of function"
parser = argparse.ArgumentParser(description=usage)
parser.add_argument("--sp", dest="path", help='Path to the source logs ie logs/')
...
...(additional add arugments)
args = parser.parse_args()
def getFiles(path,org_phrase,new_phrase,org_AN,new_AN,dst_path):
if not len(sys.argv) > 1:
parser.print_help()
else:
run your logic
如果有人仍然对(非常简单的)解决方案感兴趣:
parser = argparse.ArgumentParser()
parser.add_argument("jfile", type=str, help="Give the JSON file name.")
parser.add_argument("--output", type=str, help="Type in the final excel files name.")
try:
args = parser.parse_args()
return args
except:
parser.print_help()
我的教授希望脚本即使在参数太少的情况下也能强制显示 -h / --help 页面。而不是像 "python SCRIPT.py -h" 那样。 所以我在这里所做的就像:"Try to parse the arguments. And if it works, give them back to the main methode. Otherwise, if you fail (except), print the help(). Okay? Nice"。 ;)