有没有办法在 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 asString 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')
关于python - 在 Python 中从命令行解析带空格的字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34256250/