Python 如何将原始输入与argv一起使用?

Python 如何将原始输入与argv一起使用?,python,argv,raw-input,Python,Argv,Raw Input,我正在做《艰苦学习Python》中的ex13 我想通过: 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 variab

我正在做《艰苦学习Python》中的ex13

我想通过:

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
回溯(最近一次呼叫最后一次):
文件“ex13.py”,第5行,在
脚本,第一,第二,第三=argv
ValueError:要解压缩的值太多

我想知道为什么会出现此错误,以及如何修复它

您不能将
raw\u input()
argv
一起使用
argv
提供了您在运行程序之前指定的数据
raw_input()
是一个Python函数,即程序可以执行的功能。命令行-在这里键入
python
命令以运行程序-与程序本身完全不同。

我自己正在进行LPTHW,刚刚开始这个练习。我认为作者的意思是,他希望您在同一脚本中同时使用
argv
raw\u input()
。他并不想让你把它们结合在一起,就其本身而言,在同一个论据、同一条线或任何东西中。事实上,他提到的一个“普通学生问题”就是关于这个问题的。他说

不要想得太多。只需在这个脚本的末尾打两行,它使用
raw\u 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)

我想这就是作者的意思(使用argv获取输入&使用它int raw_input()):-


作者的想法应该是这样的 如果您在ipython笔记本中

% run ex13.py 1st 2nd 3rd
如果您在命令行中

 python ex13.py 1st 2nd 3rd

由于作者在学习练习中的说明很清楚:“将
raw_input
argv
结合起来,制作一个从用户获得更多输入的脚本。”,您可以使用“添加另一行”询问第四个输入

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

这样,您就不需要为运行脚本提供
pythonex13.py
数据。再次强调,这不是学习训练想要你做的,但我希望它可能会有所帮助。

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

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]

如果您试图通过艰苦的方式学习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)

这似乎是作者的建议吗?

我现在正在学习这一点,我想他只是想让你思考和尝试更多。 这是我的密码:

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."

您无法传递
原始输入()!以下内容对我来说很好:
python test.py 1 2 3
您使用的是什么操作系统?当您通过
raw\u input()
时,它实际上不允许原始输入。从命令行,它将从argv传递arg1、arg2和arg3字符串
raw_input
,arg0仍将是脚本名称。但是,这不应该引发错误,因为argv将生成值来修复“太多值”异常,您确实需要
打印argv
,并查看其中的内容。这仍然无法解决@ZWiki提出的问题(命令行参数只是字符串,而不是要执行的代码,因此您只需要获取字符串
'raw_input()“
作为
first
的值,等等-假设您的shell不尝试将其解释为函数调用-
bash
会,但
cmd
不会,例如),但它将允许您通过异常,以便您可以解决该问题,这是一个进步。
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."