【发布时间】: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