【问题标题】:Writing Python script in PowerShell: how to use argv?在 PowerShell 中编写 Python 脚本:如何使用 argv?
【发布时间】:2014-06-23 01:12:49
【问题描述】:

我是 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

那时我遇到了一个巨大的错误......我只是想知道,有没有办法将 argv 直接声明到 PowerShell 中,还是不可能? -谢谢

【问题讨论】:

    标签: python powershell command-line arguments 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
    >>> ['']
    

    PowershellPython 是两个独立的东西,每个都有自己的参数概念。正如bash 脚本具有传入参数的概念一样,Powershell 也是如此,尽管它们的处理方式不同。但是,两者都没有直接连接到 Python 的argv

    一般来说,可以使用 environment variables 在 Python 和 shell 之间来回传递信息(即,您可以在 Python 中设置 environment variables 以在 shell 中读取,反之亦然,但是在任何一种情况下,这些都与argv 不同,后者特别是传递给python 可执行文件的参数)。或者可以使用 shell 中的环境变量来确定应该将哪些参数传递给python,从而确定argv 将是什么。

    查看此链接了解更多详情:https://docs.python.org/2/library/sys.html#sys.argv

    根据 OP 的评论进行编辑:

    您本身不能声明argv。它代表解释器的调用方式,在交互模式下,根据定义,它没有参数。

    对于您的具体示例,它与tuples 在Python 中的解包方式和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),因此可以将其解压缩到两个不同的变量中。

    【讨论】:

    • 啊,好吧,你刚刚回答了我的问题。如果我尝试在交互模式下声明多个 argv,为什么会出现错误?例如:>> firstArgument=argv(工作正常)与 >> firstArgument, secondArgument=argv(错误!)。抱歉,我还没有习惯 StackOverflow 的格式。此外,有没有办法初始化这些参数或为这些参数赋值?
    猜你喜欢
    • 1970-01-01
    • 2021-06-30
    • 2018-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 2018-03-24
    相关资源
    最近更新 更多