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

15 投票
3 回答
13817 浏览
提问于 2025-04-29 03:24

我有一个脚本,可以通过命令行运行,我希望能够传递字符串参数给它。比如说:

script.py --string "thing1\nthing2"

这样程序就能把 '\n' 识别为换行符。如果我有一个字符串 string="thing1\nthing2",我希望得到:

print string

返回的结果是:

thing1
thing2

而不是 thing1\nthing2

如果我直接把字符串 "thing1\nthing2" 写死在脚本里,程序能正常工作,但如果通过命令行参数传入,程序就不识别了。我尝试了很多方法,比如用 r"%s" % arg 来读取命令行字符串,或者在命令行上用不同的方式指定参数,但都没有成功。有没有什么想法?这完全不可能吗?

暂无标签

3 个回答

11

这个问题其实是关于命令行的,因为命令行负责处理所有的命令解析。Python并不关心这些,它只接收通过exec系统调用传递过来的内容。如果你使用的是bash,双引号之间的某些转义字符不会被处理。如果你想让像\n\t\xnn这样的字符被转义,可以使用以下语法,这是bash的一个扩展:

python test.py $'thing1\nthing2'

注意,上面的例子使用的是单引号,而不是双引号。这一点很重要。使用双引号会导致不同的规则适用。你也可以这样做:

python test.py "thing1
thing2"

如果你对bash的引号用法感兴趣,这里还有更多信息。即使你不使用bash,了解这些内容也是有帮助的:

http://mywiki.wooledge.org/Quotes

16

这个链接 中提到,在Bash中,你可以使用:

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

例如:

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

不过,这种写法是特定于Bash的。

-2

这个问题其实很简单,我很惊讶没有人提到过。

在你的Python脚本里,只需要写下面这段代码:

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

这样你就能看到字符串会换行显示,而不是显示\n这个符号。

撰写回答