Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.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_Command Line_Newline_Argv_Sys - Fatal编程技术网

Python 传递带有空格和换行符的字符串作为命令行参数

Python 传递带有空格和换行符的字符串作为命令行参数,python,command-line,newline,argv,sys,Python,Command Line,Newline,Argv,Sys,我试图在python脚本中传递一个名为main.py的带有空格和换行符的字符串作为命令行参数,但不确定是否可行 我正在尝试传递字符串'5 2\n 3 2\n 1 1 2',并使其在脚本中显示得与此完全相同。为此,我使用了sys和argv: 命令行: python main.py "5 2\n 3 3 2\n 1 1 2" Python脚本: info_input = sys.argv[1] 但是,该列表的输出似乎是一个列表,在换行符中添加了转义字符: ['5 2\\n 3

我试图在python脚本中传递一个名为
main.py
的带有空格和换行符的字符串作为命令行参数,但不确定是否可行

我正在尝试传递字符串
'5 2\n 3 2\n 1 1 2'
,并使其在脚本中显示得与此完全相同。为此,我使用了
sys
argv

命令行:

python main.py "5 2\n 3 3 2\n 1 1 2"
Python脚本:

info_input = sys.argv[1]
但是,该列表的输出似乎是一个列表,在换行符中添加了转义字符:

['5 2\\n 3 3 2\\n 1 1 2']
是否可以将其作为参数传递,并使python中的输出显示为:

"5 2\n 3 3 2\n 1 1 2"
非常感谢

编辑

打印(信息输入)
'5 2\n 3 2\n 1 1 2'
input\u split=info\u input.split(sep='\n')
打印(输入/分割)
['5 2\\n 3 2\\n 1 1 2']

它没有在这里的换行符上拆分,而是整个事件的列表。

一个可能的旁路可能是
string.replace()
。您可以执行
'5 2NL 3 3 2NL 1 2'
然后执行
info\u input=sys.argv[1]。替换(“NL”,“\n”)
。这可能是一个暂时的解决方案,直到你找到更好的解决方案。

关于你问题的这两点,我想澄清一下

我试图传递一个带有空格和换行符的字符串

是否可以将其作为参数传递,并使python中的输出显示为:

"5 2\n 3 3 2\n 1 1 2"
使用
python main.py“5 2\n 3 3 2\n 1 1 2”调用脚本时,
没有传递实际的换行符。 这就是为什么字符串中有
\\n
,Python会转义这些
\n
,否则这意味着您的字符串确实有新行字符。
您混淆了字符串的表示形式和字符串本身。检查
repr
vs
str

单独打印字符串时,打印效果很好,但打印列表时会显示转义字符,这解释了为什么会得到不同的结果

当您这样做时:

input\u split=info\u input.split(sep='\n')
打印(输入/分割)
实际上您没有拆分字符串,因为字符串不包含换行符(
\n
),它包含转义的换行符(
\\n
)。
如果您确实想在换行符中拆分字符串,可以执行以下操作:

input\u split=info\u input.split(sep='\\n')
打印(输入/分割)
输出<代码>['5 2',3 3 2',1 1 2']


也就是说,如果您的目标是在程序中使用实际的换行符,则可以用换行符替换转义的换行符:

导入系统 信息输入=sys.argv[1] 带有转义换行符的信息输入=信息输入 打印(“带转义新行作为字符串的信息输入”,带转义新行的信息输入) 打印(“带转义新行列表的信息输入”、“带转义新行列表的信息输入”),[带转义新行的信息输入]) info\U input\U带有新行=info\U input。替换('\\n','\n') 打印(“info\U input\U以\U新行作为字符串”,info\U input\U以\U新行) 打印(“info\U input\U with\U newlines as list”,[info\U input\U with\U newlines]) 哪个输出

>python as.py“5 2\n 3 2\n 1 2”
信息\u输入\u,换行\u换行符为字符串5 2\n 3 3 2\n 1 2
信息\u输入\u与\u转义\u换行符作为列表['5 2\\n 3 3 2\\n 1 1 2']
信息\u输入\u,新行为字符串5 2
3 3 2
1 1 2
信息\u输入\u和\u换行符作为列表['5 2\n 3 3 2\n 1 1 2']
注意现在
split
是如何分割字符串的:

导入系统 信息输入=sys.argv[1]。替换('\\n','\n')。拆分(sep='\n') 打印(信息输入) 哪些产出:

python as.py“5 2\n 3 2\n 1 2”
['5 2', ' 3 3 2', ' 1 1 2']

您希望实现什么目标?
\\n
在那里是正确的。请注意,如果执行
打印(sys.argv[1])
操作,字符串将按您的需要打印。我的脚本使用
格式“5 2\n 3 3 2\n 1 1 2”
并按下面的
\n
拆分输入,如果引入转义字符,则该格式似乎会失败。输出也是一个列表,它不是我的脚本需要处理的字符串格式。是否要上载一个示例,说明您提到的拆分是如何失败的?不能使用另一个不是换行符的分隔符吗?无论如何,
\n
应该是“可拆分”的,也许类似的东西可以帮上忙?(我的意思是使用
拆分行
)@ffigari为延迟道歉。splitlines方法似乎比使用
sep
参数对
\n
进行拆分要有效得多。但是由于转义字符,它仍然没有拆分任何内容,并且与上面编辑的版本相同。不幸的是,由于我在脚本中进一步拆分了
\n
,所以这将无法工作。回答非常好,解释得非常好。非常感谢。