我正在使用命令行输入在我的.py脚本中执行一些简单的任务。
我的输入是.py(GPIO)(SERIAL)(日志)(调试)(可以包含整数)(引脚)(可以包含整数)(详细)(帮助)
当然它是所有用户输入所以它区分大小写。
我正在使用:
if "gpio" in [x.lower() for x in sys.argv]:
工作正常,
if str(['Debug','10'])[1:-1] in str([sys.argv]):
if str(['Pin','10'])[1:-1] in str([sys.argv]):
适用于区分大小写和精确整数值,但对于区分大小写和不同的整数值都不正常。 所以我需要让它接受任何情况str.lower()和任何整数值int() 但我尝试的一切都失败了。 str.lower不接受列表,我不知道如何处理整数。
如果可能,我想在不导入模块的情况下这样做。
答案 0 :(得分:0)
是的,正如BlackJack所说,正确的方法是使用argparse。你可以自己动手,但是存在argparse的原因 - 解析变得复杂并且工作已经完成。尽管如此,这是一个简单的参数解析器,可以做你想要的,假设我理解你的问题:
import sys
cmd = None
commands = {}
for arg in sys.argv[1:]:
# set the cmd for all the args that have a value
if arg.lower() == 'debug' or arg.lower() == 'pin':
cmd = arg
# next check for boolean args
elif arg.lower() == 'gpio':
commands[arg.lower()] = True
# take everything else to be a value associated with cmd
else:
commands[cmd] = int(arg)
cmd = None
print(commands)
答案 1 :(得分:0)
我最后用Brad Dre的帮助“arg.lower()得到了:
if len(sys.argv) > 1:
for i in range(1,len(sys.argv)):
if str.isdigit(sys.argv[i]):
arg = sys.argv[i-1]
newval[arg.lower()] = int(sys.argv[i])
创建“词典”,然后调用:
if "debug" in newval:
if "pin" in newval:
为我工作。
答案 2 :(得分:0)
<meta itemprop="worstRating" content="0" />
<span itemprop="ratingValue">0</span>/<span itemprop="bestRating">5</span>
的示例。它不是不区分大小写的,但我认为不允许argparse
,--gpio
,--Gpio
,...
--gPiO
免费获得from argparse import ArgumentParser
def main():
parser = ArgumentParser()
parser.add_argument(
'--gpio', action='store_true', default=False, help='Use GPIO.'
)
parser.add_argument(
'--serial', action='store_true', default=False,
help='Make a serial connection.'
)
parser.add_argument(
'--log', action='store_true', default=False, help='Log actions.'
)
parser.add_argument(
'--debug', metavar='LEVEL', type=int, default=0, help='Debug level.'
)
parser.add_argument('--pin', type=int, help='Pin number.')
parser.add_argument(
'--verbose', action='count', default=0,
help='Increase level of verbosity.'
)
options = parser.parse_args()
if options.gpio:
pass
if options.debug > 0:
pass
if options.pin is not None:
pass
if __name__ == '__main__':
main()
:
--help