从命令行将换行符传递到Python脚本中的字符串中
我有一个脚本,可以通过命令行运行,我希望能够传递字符串参数给它。比如说:
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,了解这些内容也是有帮助的:
16
在 这个链接 中提到,在Bash中,你可以使用:
script.py --string $'thing1\nthing2'
例如:
$ python test.py $'1\n2'
1
2
不过,这种写法是特定于Bash的。
-2
这个问题其实很简单,我很惊讶没有人提到过。
在你的Python脚本里,只需要写下面这段代码:
print string.replace("\\n", "\n")
这样你就能看到字符串会换行显示,而不是显示\n这个符号。