命令行Python应用程序中的多行用户输入

命令行Python应用程序中的多行用户输入,python,string,input,copy-paste,Python,String,Input,Copy Paste,在命令行Python应用程序中,有没有简单的方法来处理多行用户输入 我在寻找一个没有任何结果的答案,因为我不想: 从文件中读取数据(我知道,这是最简单的方法) 创建任何GUI(让我们只使用命令行,好吗?) 逐行加载文本(应一次粘贴,不打印,不逐行粘贴) 分别处理每一行(我希望将整个文本作为字符串) 我想实现的是允许用户粘贴整个文本(包含多行),并将输入作为一个字符串捕获到整个命令行工具中。在Python中可能吗 如果该解决方案在Linux和Windows环境下都能工作,那就太好了(我听说,例

在命令行Python应用程序中,有没有简单的方法来处理多行用户输入

我在寻找一个没有任何结果的答案,因为我不想:

  • 从文件中读取数据(我知道,这是最简单的方法)
  • 创建任何GUI(让我们只使用命令行,好吗?)
  • 逐行加载文本(应一次粘贴,不打印,不逐行粘贴)
  • 分别处理每一行(我希望将整个文本作为字符串)
我想实现的是允许用户粘贴整个文本(包含多行),并将输入作为一个字符串捕获到整个命令行工具中。在Python中可能吗

如果该解决方案在Linux和Windows环境下都能工作,那就太好了(我听说,例如,某些解决方案可能会由于cmd.exe的工作方式而导致问题)。

使用:

input=raw\u输入(“输入文本”)

它们以字符串形式输入所有输入。因此,如果粘贴整个文本,所有文本都将位于
input
变量中

编辑:显然,这只适用于Windows上的Python Shell

import sys

text = sys.stdin.read()
粘贴后,您必须通过发送一个文件结尾控制字符(在Linux中为ctrl+D,在Windows中为ctrl+Z,后跟enter)来告诉python不再有输入

此方法也适用于管道。如果上面的脚本名为
paste.py
,则可以执行以下操作

$ echo "hello" | python paste.py
上述命令将
dir
的输出保存到
text
变量中。当使用管道提供输入时,无需手动键入文件结尾字符——当创建输入的程序完成时,python将自动收到通知。

您可以从剪贴板获取文本,而无需用户粘贴多行文本所需的任何附加操作。
raw\u input()

import Tkinter
root = Tkinter.Tk()
root.withdraw()

text = root.clipboard_get()

root.destroy()

另请参见

我认为Windows命令提示符不会像您希望的那样处理多行。这样做的目的是什么?也许如果你给出一些上下文,某人可能会有不同的方法来解决这个问题。@Aesthete,你知道Linux的情况吗?如果它在Linux中工作,对我来说可能就足够了。。。关于上下文-这只是一个为我做一些烦人任务的小工具(获取一些字符串并生成文本输出)。在下一阶段,它将直接加载和解析指定的网页;现在,我在寻找最简单的输入数据的方法(任务不是可重复的,所以我认为与文件或RWYI输入-循环打交道有点多余,因为我只想一次粘贴一个字符串,这就是全部:)。我也希望将该方法(如果存在)用于其他一些工具……您说您有“许多文本要复制并粘贴到程序中”,这些文本来自哪里?当然,它是文本文档、网页或其他类型的已经数字保存的格式,为什么不直接从中读取呢?如果您的目的是高效/省时/自动化,为什么用户要ctrl-c ctrl-v内容?python支持通过子进程传递数据,因此您可以编写程序来支持复制粘贴,并编写另一个程序来向其发送大量数据。既然你提到你想以后再扩展。@InbarRose,谢谢你的回答。在这种情况下,IMO拷贝粘贴实际上是最简单有效的方法。我想输入网页的一部分。正如我所说,连接网页并对其进行解析以提取我想要的内容可能是下一个阶段(需要一些工作来构建下载和解析机制),但现在我可以使用复制粘贴,我相信这将是简单易行的。你曾问过:“为什么不简单地读一下呢?”。粘贴到文本文件中并保存在硬盘上以从应用程序中读取它似乎是不太舒服的解决方案…如果文本中有新行,则不是这样。。。只有换行符之前的部分将被删除read@mgilson我知道文件上说的。但是,显然,当你复制粘贴它的工作。我用大量的换行符复制粘贴了一整页文字。我复制粘贴了一小段代码,里面有一个换行符,但它不起作用。也许它依赖于终端?@mgilson我在Windows上使用了2.7版的Python外壳。我在OS-X上使用的是默认的命令行界面
terminal
。。。(我想我也可以在UbuntuLinux上测试它…)哇,两行解决方案-看起来比我预期的要多:D我现在无法检查这个,但是谢谢你的回答。我会在几个小时内提供我的反馈。谢谢你的建议!我甚至没有考虑过这样的方法,但这确实是一个很好的选择。
import Tkinter
root = Tkinter.Tk()
root.withdraw()

text = root.clipboard_get()

root.destroy()