【问题标题】:Command line input in PythonPython中的命令行输入
【发布时间】:2013-04-17 06:56:10
【问题描述】:

是否可以先运行程序,然后在命令行中等待用户输入。 例如

Run...

Process...

Input from the user(in command line form)...

Process...

【问题讨论】:

  • 欢迎来到 StackOverflow!否决票通常意味着根据常见问题解答这不是一个好问题。虽然这似乎是一个完全有效的问题,但我猜投反对票的人认为这是重复的说法,类似于stackoverflow.com/questions/70797/python-and-user-input。作为新用户,您可以随意访问元数据或询问(在 cmets 中)如何改进。

标签: python command-line input python-2.7 user-input


【解决方案1】:

完全不清楚 OP 的含义(即使在 cmets 中反复讨论之后),但这里有两个对问题可能解释的答案:

用于交互式用户输入(或管道命令或重定向输入)

在 Python 2.x 中使用 raw_input,在 Python 3 中使用 input。(这些是内置的,因此您无需导入任何内容即可使用它们;您只需为您的版本的python。)

例如:

user_input = raw_input("Some input please: ")

更多详情请见here

因此,例如,您可能有一个看起来像这样的脚本

# First, do some work, to show -- as requested -- that
# the user input doesn't need to come first.
from __future__ import print_function
var1 = 'tok'
var2 = 'tik'+var1
print(var1, var2)

# Now ask for input
user_input = raw_input("Some input please: ") # or `input("Some...` in python 3

# Now do something with the above
print(user_input)

如果你把它保存在foo.py,你可以从命令行调用脚本,它会打印出tok tiktok,然后要求你输入。您可以输入bar baz(后跟回车键),它会打印bar baz。这就是它的样子:

$ python foo.py
tok tiktok
Some input please: bar baz
bar baz

这里,$ 代表命令行提示符(所以你实际上并不输入),当它要求输入时,我在输入 bar baz 后点击了Enter

对于命令行参数

假设您有一个名为 foo.py 的脚本,并希望从命令行使用参数 barbaz 调用它

$ foo.py bar baz

(同样,$ 代表命令行提示符。)然后,您可以在脚本中执行以下操作:

import sys
arg1 = sys.argv[1]
arg2 = sys.argv[2]

这里,变量arg1 将包含字符串'bar',而arg2 将包含'baz'。对象sys.argv 只是一个包含命令行中所有内容的列表。请注意,sys.argv[0] 是脚本的名称。例如,如果您只需要一个包含所有参数的列表,则可以使用 sys.argv[1:]

【讨论】:

  • 谢谢,但我需要命令行参数而不是用户提示。这可能吗?
  • 哦,是的。我会改变我的答案。
  • @ViinQuileste 退后一步,你为什么需要它? raw_input 可以穿梭到 subProcess 以执行 shell 命令,使用 readline 将提供 tab 补全。
  • 感谢 Mike,但是有没有办法以命令行形式进行交互式用户输入?
  • 我不确定你的意思,除了raw_input,它是交互式的。所以你会从命令行调用脚本,它可能会先执行一些命令,然后它会到达raw_input 行并要求你输入,然后继续。我已经更新了答案的第二部分,以便为您提供更完整的示例。
【解决方案2】:

只接受输入

the_input = raw_input("Enter input: ")

就是这样。

此外,如果您想制作输入列表,您可以执行以下操作:

a = []

for x in xrange(1,10):
    a.append(raw_input("Enter Data: "))

在这种情况下,系统会要求您提供 10 次数据以将 9 个项目存储在一个列表中。

输出:

Enter data: 2
Enter data: 3
Enter data: 4
Enter data: 5
Enter data: 7
Enter data: 3
Enter data: 8
Enter data: 22
Enter data: 5
>>> a
['2', '3', '4', '5', '7', '3', '8', '22', '5']

您可以使用以下基本方式搜索该列表(在制作该列表之后):

if '2' in a:
    print "Found"

其他: 打印“未找到。”

你可以像这样用“raw_input()”替换'2':

if raw_input("Search for: ") in a:
    print "Found"
else: 
    print "Not found"

通过命令行界面从输入文件中获取原始数据

如果您想从通过命令行提供的文件中获取输入(这通常是您在为比赛处理代码问题时需要的,例如 Google Code Jam 或 ACM/IBM ICPC):

example.py

while(True):
    line = raw_input()
    print "input data: %s" % line

在命令行界面中:

example.py < input.txt

希望对您有所帮助。

【讨论】:

  • 谢谢,但命令行形式仍然没有。这甚至可能吗?
  • 你是否给它提供了一个像“input.txt”这样的文件并且你希望它从那个文件中读取?
  • 你的意思是你给它一个文件或目录的名字?或者您是否希望它读取您希望程序使用的某些参数的文件?我认为我们对您所说的“命令行形式”的意思感到困惑。
  • 是的,这是一个很大的帮助。谢谢斯波克先生。上帝保佑。
  • 没问题。如果是这样,请随时接受答案。哈哈
【解决方案3】:

如果您使用的是 Python 3,raw_input 已更改为 input

Python 3 示例:

line = input('Enter a sentence:')

【讨论】:

    【解决方案4】:

    使用以下行开始您的脚本。该脚本将首先运行,然后您将获得 python 命令提示符。此时,所有变量和函数都可用于交互使用和调用。

    #!/usr/bin/env python -i

    【讨论】:

    • 这实际上效果很好,但最好能解释一下“-i”的作用
    • @DantePuglisi -i 表示交互式
    猜你喜欢
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-08-31
    • 2021-06-06
    • 1970-01-01
    相关资源
    最近更新 更多