【问题标题】:Passing argument with a forward slash in python argparse在 python argparse 中使用正斜杠传递参数
【发布时间】:2021-10-23 13:44:46
【问题描述】:

我正在使用 argparse 来获取命令行参数,例如:

parser = argparse.ArgumentParser()

parser.add_argument('execCmd' , type=str)
args = parser.parse_args()

print(args)

现在当我像这样从命令行运行它时:

$python script.py "/bin/exec 10"

控制台上的结果是

Namespace(execCmd='C:/Program Files/usr/bin/exec 10')

它将文件路径添加到参数中。用户可以使用“/”开始命令,也可以不使用。有没有办法在 argeparse 中处理这个问题,如果用户添加“/”,则命令在没有文件目录的情况下按原样传递?

【问题讨论】:

  • 我运行了您的代码,但没有得到前置结果?您确定您正确复制并粘贴了代码吗?
  • 是的!这是在窗户里。以“/”开头总是在文件路径前面
  • 添加的是操作系统,而不是 argparse。

标签: python argparse


【解决方案1】:

无论如何,argparse can take in functions for the type,你可以做一些检查,看看他们传入的第一个字符是否是/

比如:

def check_slash(string):
     if string and len(string) > 0 and string[0] == '/':
         return string
     else:
         return 'C:/Program Files/' + string

parser.add_argument('execCmd' , type=check_slash)

【讨论】:

    【解决方案2】:

    问题在于此处定义的 bash: https://github.com/bmatzelle/gow/issues/196

    我是从 git bash 运行它,因此它会将 gow 路径附加到参数中。 将参数传递为

    $python script.py "//bin\exec 10"
    

    有效,留下空间也有效

    $python script.py " /bin/exec 10"
    

    如果在 powershell 中运行相同的命令,这不是问题。

    【讨论】:

      猜你喜欢
      • 2014-05-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-23
      • 2016-10-04
      • 1970-01-01
      • 2018-10-17
      • 1970-01-01
      相关资源
      最近更新 更多