gpt4 book ai didi

python - 与报价处理完全混淆

转载 作者:行者123 更新时间:2023-12-01 08:21:34 28 4
gpt4 key购买 nike

当涉及反引号时,我正疯狂地试图弄清楚如何正确地将参数从 shell 脚本传递到 python。

这是我的./foo.sh

#!/bin/bash
EXEC_SCRIPT="./foo.py -c $1"
result=`${EXEC_SCRIPT}`
echo ${result}

这是我的./foo.py

#!/usr/bin/python
import argparse

ap = argparse.ArgumentParser()
ap.add_argument('-c', required=True)

args,u = ap.parse_known_args()
args = vars(args)

print ("I GOT {}".format(args['c']))

我愿意:

./foo.sh ABC

我得到:

I GOT ABC

完美。

但后来我这样做了:

./foo.sh "Hello World"

我得到:

I GOT Hello

尝试将 bash 脚本更改为:

EXEC_SCRIPT="./foo.py -c  \"$1\""

产品:

I GOT "Hello

如果我不使用反引号,这一切都不是问题。转义引号效果很好。

我错过了什么?

我真正想要的是 python 脚本应该得到我的参数,无论是 1 个单词还是 2 个不带引号的单词。

进一步说明:感谢 Gordon 和 AK47 提出相同的建议。看起来根本原因是我将命令填充到一个名为 EXEC_SCRIPT 的变量中。直接在反引号内调用该命令是有效的。我的真实脚本更加复杂,并且 EXEC_SCRIPT 由于不同的条件而指向不同的值。有什么好方法可以实现干净的代码,让我找出正确的命令,然后在最后调用它?正如我所做的那样,使用变量是合乎逻辑的,但它显然不起作用

最佳答案

我要感谢@that other person 和@Gordon Davisson 对建议的评论澄清。

修改 foo.sh 以执行数组而不是像这样的字符串:

#!/bin/bash
EXEC_SCRIPT=(./foo.py -c "$1")
result=$("${EXEC_SCRIPT[@]}")
echo ${result}

效果非常好!!

关于python - 与报价处理完全混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54612313/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com