Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从命令行将字符串中的换行符传递到python脚本_Python_Bash_Getopt - Fatal编程技术网

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

从命令行将字符串中的换行符传递到python脚本,python,bash,getopt,Python,Bash,Getopt,我有一个从命令行运行的脚本,我希望能够将字符串参数传递给它。如 script.py --string "thing1\nthing2" 以便程序将“\n”解释为新行。如果string=“thing1\nthing2”我想要 print string 返回: thing1 thing2 而不是thing1\n thing2 如果我只是将字符串“thing1\n thing2”硬编码到脚本中,它就会这样做,但是如果它是通过getopt作为命令行参数输入的,它就不会识别它。我已经尝试了很多方法:

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

script.py --string "thing1\nthing2"
以便程序将“\n”解释为新行。如果
string=“thing1\nthing2”
我想要

print string
返回:

thing1
thing2
而不是
thing1\n thing2

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

在Bash中,您可以使用:

script.py --string $'thing1\nthing2'
e、 g


但这是Bash特有的语法。

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

python test.py $'thing1\nthing2'
请注意,上面的示例使用单引号,而不是双引号。这很重要。使用双引号会导致应用不同的规则。您还可以执行以下操作:

python test.py "thing1
thing2"
如果你有兴趣,这里有更多关于bash引用的信息。即使您没有使用bash,它仍然是一本不错的读物:


这一条相对简单,我很惊讶没有人这么说

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

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

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

这看起来更像是一个shell问题,而不是python问题。也许你应该展示你正在使用的一些shell代码,并用你的shell标记你正在使用的shell(例如,
bash
),这实际上更像是一种黑客行为,以弥补错误的参数数据。我不会说这是一种黑客行为。它提供了一个简单的解决方案,可以逆转python对字符串所做的转义。其他所有解决方案都要求用户处于bash中。这提供了一个python解决方案,虽然他们使用bash作为示例,但其他答案实际上是关于用户与shell的正确交互。因为他/她显然是通过shell调用python,所以以shell为中心的答案是正确的。此外,python没有对字符串进行任何转义。Python正在获取一个包含字符“\”和“n”的字符串。因为这个字符串在python文件中不是文本,所以没有转义。我想我读错了这个问题。优点很好,但这仍然修复了python中最常见的情况。根据程序的用途,您不能总是信任参数数据。这是唯一有效的。无论出于何种原因,bash相关的解决方案(我确信这些解决方案是有效的,取决于shell配置)似乎对我的情况没有任何影响。谢谢出于某种原因,这没有任何效果。请注意,单引号是重要的。带有$'…'的第一个建议(也是公认的答案)不允许变量替换。第二个does@NameOfTheRose是的,尽管人们忘记或常常没有意识到变量不必在引号之间替换。例如,您可以执行以下操作:
echo$over$'\n tween\n'$over
print string.replace("\\n", "\n")