将字符串中的换行符从命令行传递到python脚本中

时间:2014-10-22 21:44:57

标签: python bash getopt

我有一个脚本,我从命令行运行,我希望能够将字符串参数传递给。如在

script.py --string "thing1\nthing2"

这样程序会将'\ n'解释为新行。如果string="thing1\nthing2"我想要

print string

返回:

thing1
thing2

而不是thing1\nthing2

如果我只是将字符串“thing1 \ nthing2”硬编码到脚本中,它会执行此操作,但如果它通过getopt作为命令行参数输入,则它无法识别它。我已经尝试了很多方法:在cl字符串中读取r"%s" % arg,在命令行上指定它的各种方法等,似乎没有任何工作。想法?这完全不可能吗?

3 个答案:

答案 0 :(得分:9)

来自Bash中的https://stackoverflow.com/a/4918413/478656,您可以使用:

script.py --string $'thing1\nthing2'

e.g。

$ python test.py $'1\n2'
1
2

但那是Bash特有的语法。

答案 1 :(得分:4)

这实际上是一个shell问题,因为shell会执行所有命令解析。 Python并不关心它发生了什么,只能在exec系统调用中得到结果。如果你正在使用bash,它不会在双引号之间进行某些类型的转义。如果您希望对\n\t\xnn之类的内容进行转义,则以下语法为bash扩展名:

python test.py $'thing1\nthing2'

你也可以这样做:

python test.py "thing1
thing2"

如果您对此感兴趣,请参阅bash引用的更多信息。即使您不使用bash,它仍然可以很好地阅读:

http://mywiki.wooledge.org/Quotes

答案 2 :(得分:-3)

这个相对简单,我很惊讶没人说过。

在你的python脚本中,只需编写以下代码

print string.replace("\\n", "\n")

您将获得使用新行打印的字符串,而不是\ n。