我有一个简单的python脚本,如下所示:
import sys
lines = sys.argv[1]
for line in lines.splitlines():
print line
我想从命令行(或.bat文件)调用它,但第一个参数可能(并且可能会)是一个包含多行的字符串。如何做到这一点?
当然,这有效:
import sys
lines = """This is a string
It has multiple lines
there are three total"""
for line in lines.splitlines():
print line
但我需要能够逐行处理一个参数。
编辑:这可能是一个Windows命令行问题,而不是Python问题。编辑2:感谢所有好的建议。它看起来不太可能。我不能使用另一个shell,因为我实际上是试图从另一个程序调用该脚本,该程序似乎在后台使用Windows命令行。
答案 0 :(得分:2)
将参数括在引号中:
$ python args.py "This is a string
> It has multiple lines
> there are three total"
This is a string
It has multiple lines
there are three total
答案 1 :(得分:2)
我知道这个帖子已经很老了,但我在试图解决类似的问题时遇到了它,而其他人也可能会这样,所以让我告诉你我是如何解决它的。
这至少在Windows XP Pro上有效,Zack的代码在一个名为
的文件中
“C:\划痕\ test.py”:
C:\Scratch>test.py "This is a string"^
More?
More? "It has multiple lines"^
More?
More? "There are three total"
This is a string
It has multiple lines
There are three total
C:\Scratch>
这比上面的Romulo解决方案更具可读性。
答案 2 :(得分:1)
以下可能有效:
C:\> python something.py "This is a string^
More?
More? It has multiple lines^
More?
More? There are three total"
答案 3 :(得分:1)
这是唯一对我有用的东西:
C:\> python a.py This" "is" "a" "string^
More?
More? It" "has" "multiple" "lines^
More?
More? There" "are" "three" "total
对我来说Johannes' solution在第一行的末尾调用python解释器,所以我没有机会传递额外的行。
但是你说你是从另一个进程调用python脚本,而不是从命令行调用。那你为什么不用dbr' solution?这对我来说是一个Ruby脚本:
puts `python a.py "This is a string\nIt has multiple lines\nThere are three total"`
你用什么语言编写调用python脚本的程序?您遇到的问题是使用参数传递,而不是使用Windows shell,而不是使用Python ...
最后,正如mattkemp所说,我还建议您使用标准输入来读取多行参数,避免命令行魔术。
答案 4 :(得分:0)
不确定Windows命令行,但以下是否有效?
> python myscript.py "This is a string\nIt has multiple lines\there are three total"
.. ..或
> python myscript.py "This is a string\
It has [...]\
there are [...]"
如果没有,我会建议安装Cygwin并使用理智的外壳!
答案 5 :(得分:0)
您是否尝试将多行文本设置为变量,然后将其扩展传递到脚本中。例如:
set Text="This is a string
It has multiple lines
there are three total"
python args.py %Text%
或者,您可以从标准中读取参数,而不是阅读参数。
import sys
for line in iter(sys.stdin.readline, ''):
print line
在Linux上,您可以将多行文本传递给args.py的标准输入。
$< command-that-produce-text> | python args.py