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

时间:2012-09-19 11:37:57

标签: python string input copy-paste

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

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

  • 从文件中读取数据(我知道,这是最简单的方法);
  • 创建任何GUI(让我们只使用命令行,好吗?);
  • 逐行加载文本(它应该一次粘贴,不能键入,也不能逐行粘贴);
  • 分别处理每一行(我希望将整个文本作为字符串)。

我想要实现的是允许用户粘贴整个文本(包含多行)并在完全命令行工具中将输入捕获为一个字符串。在Python中有可能吗?

如果解决方案在Linux和Windows环境中都能正常工作,那将会很棒(我听说过,例如某些解决方案可能会因cmd.exe工作方式而导致问题)。

3 个答案:

答案 0 :(得分:7)

import sys

text = sys.stdin.read()

粘贴之后,你必须通过在Linux中发送文件结束控制字符( ctrl + D )来告诉python没有更多输入, ctrl + Z 后跟在Windows中输入

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

$ echo "hello" | python paste.py

text将等于"hello\n"。它在Windows中是一样的:

C:\Python27>dir | python paste.py

上述命令会将dir的输出保存到text变量。当使用管道提供输入时,无需手动键入文件结束字符 - 当创建输入的程序完成时,将自动通知python。

答案 1 :(得分:2)

您可以从剪贴板中获取文字而不需要raw_input()要求用户粘贴多行文字的任何其他操作:

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

text = root.clipboard_get()

root.destroy()

另见How do I copy a string to the clipboard on Windows using Python?

答案 2 :(得分:0)

使用:

input = raw_input("Enter text")

这些输入作为字符串输入所有输入。因此,如果您粘贴整个文本,则所有文本都将位于input变量中。

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