如何在argv中使用raw_input?

5
我是一个有用的助手,可以为您进行翻译。以下是您需要翻译的内容:

我正在学习《笨办法学Python》中的第13个练习

我试图通过以下代码:

python ex13.py raw_input() raw_input() raw_input()

我的代码如下:
from sys import argv

script, first, second, third = argv

print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

我一直遇到的错误是:

Traceback (most recent call last):
 File "ex13.py", line 5, in <module>
   script, first, second, third = argv
ValueError: too many values to unpack

我想知道为什么会出现这个错误,以及如何解决它。

你不能传递 raw_input()!对我来说,以下方式很好用:python test.py 1 2 3 - Nir Alfasi
你使用的操作系统是什么? - Karl Knechtel
当你传递raw_input()时,它实际上不会允许原始输入。从命令行中,它将从argv传递arg1、arg2和arg3字符串raw_input,而arg0仍将保留脚本名称。但是,这不应该引发错误,因为argv将产生值。 - Chrispresso
1
为了修复“太多值”的异常,你真的需要print argv并查看其中的内容。但这仍然无法解决@ZWiki提出的问题(命令行参数只是字符串,而不是要执行的代码,所以您将只得到字符串'raw_input()'作为first的值等——假设您的 shell 不会尝试将其解释为函数调用——例如bash会尝试,但是cmd不会),但它可以让您越过异常,以便您可以解决该问题,这是一种进步。 - abarnert
9个回答

11
我正在自学LPTHW,刚刚做到这个练习。我认为作者的意思是希望你在同一个脚本中同时使用argvraw_input()。他并不是指让你将它们合并在同一个参数或行中。事实上,他提到了一个“常见学生问题”,就是处理这个问题。他说:

不要想太多。只需在此脚本的末尾添加两行代码,使用raw_input()获取一些内容,然后打印出来。从那里开始尝试更多同时使用两者的方法。

虽然已经晚了两个月,但希望对你有所帮助。
以下是我修改过的脚本,以完成相关的“学习任务”:
from sys import argv

script, first, second, third = argv
fourth = raw_input("What is your fourth variable? ")

print "All together, your script is called %r, your first variable is %r, your second is %r, your third is %r, and your fourth is %r" % (script, first, second, third, fourth)

7
您不能在使用argv时使用raw_input()函数。 argv是您在运行程序之前指定的数据。而raw_input()是一个Python函数,也就是说,它是您的程序可以执行的一项操作。命令行——您输入python命令以运行程序的地方——与程序本身是完全独立的东西。请注意保留HTML标记。

2
如果您正在尝试完成《笨办法学Python》中的练习13,则需要将argv和raw_input()结合起来使用。作者建议您使用raw_input()来获取用户的更多输入。
在这个帖子的帮助下,我想出了以下代码:
from sys import argv

ScriptName, first, second, third = argv

print "What is your fourth variable?"
fourth = raw_input()
print "What is your fifth variable?"
fifth = raw_input()
print "What is your sixth variable?"
sixth = raw_input()

print "The script is called: ", ScriptName
print "Your first variable is: ", first
print "Your second variable is: ", second
print "Your third variable is: ", third
print "Your fourth variable is: ", fourth
print "Your fifth variable is: ", fifth
print "Your sixth variable is: ", sixth

print "For your script %r, these are the variables: %r, %r, %r, %r, %r,
    and %r." % (ScriptName, first, second, third, fourth, fifth, sixth)

这似乎是作者所建议的吗?

0
由于作者在练习中的指示非常清晰:“将raw_inputargv组合起来编写一个脚本,从用户那里获取更多的输入。”,您可以添加另一行代码要求输入第四个参数。
fourth = raw_input("Enter the fourth value: ")    
print "Your fourth variable is: ", fourth    

或者看看你的代码,我发现你过于思考了,比如“编写一个从用户获取输入的脚本”,可以这样做

from sys import argv

script, first, second, third = argv, raw_input("Enter first value: "), raw_input("Enter second value: "), raw_input("Enter third value: ")

print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

这样你就不需要提供数据来运行脚本了,python ex13.py。虽然这不是学习练习想让你做的事情,但我希望它能有所帮助。


0

是的,你可以这样做,但有点棘手,作者在之前的练习中没有提到。

argv实际上是一个列表[](或数据数组),因此您可以在脚本中访问其各个元素。

以下是我的示例:

from sys import argv
script, first, second, third = argv # one way to unpack the arguments

script_new = argv[0] # another way
first_new = argv[1]
second_new = argv[2]
third_new = argv[3]

print "original unpacking: ", script, first, second, third
print "argv[] unpacking: ",script_new, first_new, second_new, third_new

argv[0] = raw_input("argument 0? ")
argv[1] = raw_input("argument 1? ")
argv[2] = raw_input("argument 2? ")
argv[3] = raw_input("argument 3? ")

print argv[0], argv[1], argv[2], argv[3]

0

我现在正在学习这个,我认为他只是想让你更多地思考和尝试。 这是我的代码:

from sys import argv

script, slave = argv
print "Superme master, slave %s is waiting for your order." % slave

slave_says = "Humble %s wants know your supreme name, master:\n" % slave
name = raw_input(slave_says)

want = raw_input("What do you want, my superme master?\n")
if want == "Make you freedom.":
    print "When you make me freedom. you are also make yourself freedom."
else:
    print "Yes, my superme master."

0

我正在使用Python 3.x版本(因此,为了获取用户输入,我只需使用input()函数)

参考LPTHW,我认为作者希望我们分别使用input()和argv。

这是我的例子。

from sys import argv
script,first,second,third = argv 
age = input("Enter your age")

print("The script is called:",script)
print("Your first variable is:",first)
print("Your second variable is:",second)
print("Your third variable is:",third)
print("Your age is",age)

0
我认为这就是作者的意思(使用argv获取输入并使用raw_input())。
from sys import argv

script, first, second, third, take_input = argv

print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

raw_input(take_input + "? ")

-1

作者的想法应该是这样的,如果你在IPython笔记本中

% run ex13.py 1st 2nd 3rd

如果你在命令行中

 python ex13.py 1st 2nd 3rd

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