Python中的命令行输入

35

能否在命令行中先运行程序,然后等待用户输入?例如:

Run...

Process...

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

Process...
4个回答

89

很不清楚OP的意思(即使在评论中有些来回),但以下是两种可能解释问题的答案:

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

在Python 2.x中使用raw_input,在Python 3中使用input。(这些都是内置的,所以你不需要导入任何东西来使用它们;你只需要使用适合你的Python版本的正确函数。)

例如:

user_input = raw_input("Some input please: ")

更多详细信息可以在这里找到。

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

# 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:]

谢谢,但我需要命令行参数而不是用户提示。这可能吗? - Viin
哦,好的。我会改变我的答案。 - Mike
你可以使用raw_input()严格读取文件。虽然sys也可以工作,但我不确定为什么在这种情况下你会让事情变得复杂。请参阅我的答案的后半部分以了解我的意思。 - Mr_Spock
如何在命令提示符下将Python脚本“myscript.py”作为命令运行,而不是作为“python myscript.py args1 args2”的形式运行,例如“myscript args1 args2”? - Nishank Singla
在OS X和Linux上,执行chmod +x myscript.py命令,并将#! /usr/bin/env python添加到脚本文件的顶部。在Windows上,请阅读说明 - Mike
显示剩余7条评论

13

只是获取输入

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"

否则: print "未找到。"

您可以像这样使用“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
希望这能帮到你。

谢谢,但它仍然不是命令行形式。这真的可能吗? - Viin
1
你是在给它输入一个文件,比如“input.txt”,然后想让它从那个文件中读取吗? - Mr_Spock
你的意思是你正在输入文件或目录的名称吗?还是你想让它读取一个文件,以获取你想要程序使用的一些参数?当你说“命令行形式”时,我认为我们被搞糊涂了。 - Mike
最后一部分可能是你想要的。 - Mr_Spock
1
是的,这非常有帮助。谢谢 Mr_Spock。神保佑。 - Viin
显示剩余2条评论

12
如果您正在使用Python 3,则raw_input已更改为input
Python 3示例:
line = input('Enter a sentence:')

1

请在脚本开头加入以下代码。脚本将先运行,然后您将得到Python命令提示符。此时所有变量和函数都可以进行交互式使用和调用。

#!/usr/bin/env python -i


这实际上很好用,但最好能解释一下“-i”的作用是什么。 - Dante Puglisi
@DantePuglisi -i 表示交互式。 - James

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接