在PowerShell中编写Python脚本:如何使用argv?

0 投票
1 回答
900 浏览
提问于 2025-04-18 10:43

我刚开始学习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 个回答

3

当你单独运行 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
>>> ['']

PowershellPython 是两个不同的东西,各自有自己的参数处理方式。就像 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),所以它可以被解包到两个不同的变量中。

撰写回答