【问题标题】:Python argument missed if I pass $ inside string as input parameter如果我将字符串中的 $ 作为输入参数传递,则 Python 参数会丢失
【发布时间】:2019-10-17 10:03:41
【问题描述】:

我正在尝试将一些 shell cmd 传递到我的一个 python 脚本中,以便我可以将它们运行到主机。但是,当我将它们传递到行中时,由于某种原因省略了 $。我怎样才能避免这种情况?

我像这样使用解析器和设置:

parser = argparse.ArgumentParser(description='check size', add_help=True)
parser.add_argument('-c', "--cmd", dest="cmd",type=str, help="Command to run Ex: df -h /boot/|grep -i boot|awk '{print \$4}' 2>/dev/null ")

例如: 这是使用反斜杠

python3.4 disk_file_check.py -e env -op chksize -c "df -h /boot/|grep -i boot|awk {'print \$4'} 2>/dev/null"

因为任何人都可以使用这个脚本,他们应该传递的只是他们想要使用的命令。但我希望它像这样工作:

python3.4 disk_file_check.py -e env -op chksize -c "df -h /boot/|grep -i boot|awk {'print $4'} 2>/dev/null"

但是当我这样做时,字符串变成了:

df -h /boot/|grep -i boot|awk '{print }' 2>/dev/null

如您所见,$ 被删减并给我错误的结果...

argparse 中的任何可能设置都可以做到吗?或者我应该尝试差异方式?谢谢

【问题讨论】:

  • 我在这个上使用了python3....但不要认为python2/3有什么不同
  • 这不是python问题,而是shell之一,例如bash.
  • $4 在双引号内,因此 shell 会扩展它。调用者必须转义$ 或在-c 的参数周围使用单引号。
  • 问题出现在 shell 中,Python 无能为力。
  • 问题是你有一个用双引号括起来的变量$4。 (它 嵌套在单引号中,但这没关系。)shell 将始终尝试扩展该变量。

标签: python python-3.x python-2.7 argparse


【解决方案1】:

谢谢。我想我不会通过命令行传递它,因为 shell exapnd 它。感谢您指出这一点。

【讨论】:

    猜你喜欢
    • 2020-02-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多