Skip to main content
 首页 » 编程设计

python之在 Python 中从命令行解析带空格的字符串

2025年05月04日13dyllove98

有没有办法在 python 中调用我的程序并向它传递一个我希望它解析的字符串,而不将该字符串声明为 'String I want to parse' 但作为 String I want解析

import argparse 
 
#Parse command line for input 
parser = argparse.ArgumentParser(description='Parse input string') 
#position input argument 
parser.add_argument('string', help='Input String') 
 
args = parser.parse_args() 
arg_str = args.string 
 
print(arg_str) 

当我运行 $ python test.py String I want to parse 我得到错误:test.py: error: unrecognized arguments: I want to parse

有没有办法告诉脚本考虑空格并将输入作为一个字符串,直到到达输入末尾或到达另一个解析参数(例如 -s)?

请您参考如下方法:

“正确”的方法是 already mentioned .但 OP 特别要求:

I want it to parse without declaring the string as 'String I want to parse' but as String I want to parse

可以用 custom action 来做到这一点.与简单加入 sys.argv[1:] 相比,这种方法的优势在于解决了以下问题:

Is there anyway to tell the script to account for spaces and take the input as one string until either the end of the input is reached or another parse argument such as -s is reached?

我们可以添加其他选项,而无需将它们清除到“字符串”参数中:

import argparse 
 
class MyAction(argparse.Action): 
    def __call__(self, parser, namespace, values, option_string=None): 
        setattr(namespace, self.dest, ' '.join(values)) 
 
parser = argparse.ArgumentParser(description='Parse input string') 
parser.add_argument('string', help='Input String', nargs='+', action=MyAction) 
parser.add_argument('--extra', '-s', help='Another Option!') 
 
args = parser.parse_args() 
print args 

演示:

$ python example.py abc def ghi 
Namespace(extra=None, string='abc def ghi') 
$ python example.py abc def ghi -s hello 
Namespace(extra='hello', string='abc def ghi') 
$ python example.py -s hello abc def ghi  
Namespace(extra='hello', string='abc def ghi')