在PowerShell中编写Python脚本:如何使用argv?
我刚开始学习Python,已经花了很长时间在网上找这个问题的答案,但一直没有找到。下面是我想运行的代码(我把它保存为test.py):
from sys import argv
script, firstArgument = argv
print "Hello %s!" %firstArgument
如果我在PowerShell里直接输入这个代码,它运行得非常好:
>> cd ~
>> Python test.py "StackOverflow"
但是如果我在PowerShell里这样输入代码:
>> cd ~
>> Python
>> from sys import argv
>> script, firstArgument = argv
那我就会遇到一个很大的错误……我只是想知道,有没有办法直接在PowerShell里声明argv,还是说这根本不可能呢?
-谢谢1 个回答
当你单独运行 python
进入交互模式时,没有传入任何参数。因此,argv
是空的。
我在 Ubuntu
上运行,但在 Windows
上也是一样的道理:
:~ $ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sys import argv
>>> print argv
>>> ['']
Powershell
和 Python
是两个不同的东西,各自有自己的参数处理方式。就像 bash
脚本有传入参数的概念一样,Powershell
也有,不过它们的处理方式不同。但这两者都和 Python 的 argv
没有直接关系。
一般来说,可以使用 环境变量
在 Python 和命令行之间传递信息(也就是说,你可以在 Python
中设置 环境变量
,然后在命令行中读取,反之亦然,但无论如何,这些都和 argv
不同,因为 argv
是专门用来表示传给 python
可执行文件的参数)。或者,你可以在命令行中使用环境变量来决定应该传给 python
的参数,从而确定 argv
的内容。
想了解更多细节,可以查看这个链接:https://docs.python.org/2/library/sys.html#sys.argv
根据提问者的评论进行编辑:
你不能直接声明 argv
。它代表的是解释器被调用的方式,而在交互模式下,按照定义,它没有参数。
对于你具体的例子,这和 Python
中元组(tuple
)的解包方式以及当前 argv
的状态(空字符串)有关。
:~ $ python
Python 2.7.6 (default, Mar 22 2014, 22:59:56)
[GCC 4.8.2] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> from sys import argv
>>> firstArgument=argv
>>> print firstArgument
['']
>>> firstArgument, secondArgument=argv
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
ValueError: need more than 1 value to unpack
由于 argv
只有一个元素,所以你不能把它赋值给两个变量。
例如,你可以这样做:
>>> firstArgument, secondArgument=argv,1
>>> print secondArgument
1
现在实际上有两个值——元组 ('', 1),所以它可以被解包到两个不同的变量中。