【问题标题】:Pass multiple args from bash into python将多个参数从 bash 传递到 python
【发布时间】:2015-06-27 07:34:03
【问题描述】:

我有一个从 bash 脚本调用的简短的内联 python 脚本,我想让它处理一个多字变量(来自 $*)。我希望这能正常工作:

#!/bin/bash

arg="A B C"
python -c "print '"$arg"'"

但它没有:

  File "<string>", line 1
    print 'A
           ^
SyntaxError: EOL while scanning string literal

为什么?

【问题讨论】:

  • python -c "print \"$arg\"" 为我工作。
  • 甚至python -c "print '$arg'"
  • 语法高亮显示问题:-)

标签: python string bash command-line-arguments


【解决方案1】:

BASH 脚本错误。

#!/bin/bash

arg="A B C"
python -c "print '$arg'"

然后输出

$ sh test.sh 
A B C

请注意,要连接两个字符串变量,您不需要将它们放在字符串常量之外

【讨论】:

【解决方案2】:

我想解释一下为什么你的代码不起作用。

你想做的是:

arg="A B C"
python -c "print '""$arg""'"

输出:

A B C

你的代码的问题是python -c "print '"$arg"'"被shell解析为python -c "print '"A B C"'"。看到这个:

arg="A B C"
python -c "print '"A B C"'"
#__________________^^^^^____

输出:

  File "<string>", line 1
    print 'A

SyntaxError: EOL while scanning string literal

这里你会得到一个语法错误,因为空格会阻止连接,所以下面的 BC"'" 被解释为两个不同的字符串,它们不是作为命令传递给 python 解释器的字符串的一部分(它只需要-c 后面的字符串作为命令)。

为了更好地理解:

arg="ABC"
python -c "print '"$arg"'"

输出:

ABC

【讨论】:

  • 哥们+1的解释太棒了,但是你发布的有点早了!
  • 你能解释一下为什么python -c "print '"A B C"'" 给出了一个 SyntaxError 吗?我不确定我是否跟随。空间会怎样?
  • @Barry:当然。空格防止连接,因此以下BC"'" 被解释为两个不同的字符串,它们不是作为命令传递给python 解释器的字符串的一部分(它只接受-c 后面的字符串作为命令)。是不是更清楚了?
  • 啊!兄弟,你拿走我的银牌! :( 无论如何,Lool 更好的答案应该得到它,你的答案当然值得接受。干杯,一切顺利
  • @BhargavRao:Loool 真的很抱歉兄弟!不是故意的。只是想对 OP 的问题进行一些澄清:p 我敢肯定,希望你能早点把它拿回来!非常感谢!
猜你喜欢
  • 2017-08-07
  • 2019-03-11
  • 2015-07-27
  • 1970-01-01
  • 2017-08-28
  • 1970-01-01
  • 2022-01-07
  • 2019-05-30
  • 1970-01-01
相关资源
最近更新 更多