如何在 Windows 命令行中使用参数运行 Python 脚本

Posted

技术标签:

【中文标题】如何在 Windows 命令行中使用参数运行 Python 脚本【英文标题】:How do I run Python script using arguments in windows command line 【发布时间】:2013-07-06 19:52:54 【问题描述】:

这是我的 python hello.py 脚本:

def hello(a,b):
    print "hello and that's your sum:"
    sum=a+b
    print sum
    import sys

if __name__ == "__main__":
    hello(sys.argv[2])

问题是不能从windows命令行提示符运行,我用的是这个命令:

C:\Python27>hello 1 1

不幸的是,它没有用,有人可以帮忙吗?

【问题讨论】:

请使用正确的代码格式 如果“hello.py”位于PATH 目录中,并且运行hello 1 1 未传递命令行参数,则.py 文件关联被破坏。如果 CMD 或 PowerShell 未找到“hello.py”,则 .PY 不在 PATHEXT 中。您不需要运行python hello.py 1 1。这很烦人,因为它需要使用 hello.py 的限定路径或首先更改其目录。 【参考方案1】: import sys 没有打招呼功能。 参数应转换为 int。 应转义包含' 的字符串文字或应使用" 包围。 您是否在命令行中使用python hello.py <some-number> <some-number> 调用程序?
import sys

def hello(a,b):
    print "hello and that's your sum:", a + b

if __name__ == "__main__":
    a = int(sys.argv[1])
    b = int(sys.argv[2])
    hello(a, b)

【讨论】:

import 不在*** - 不推荐。应该放在def hello之前 在 Python 2.7 中不建议使用不带括号的 print。您应该以与 Python 3 的兼容性为目标;) @Agostino, print('a', 'b') 将在 Python 2.x 中打印 ('a', 'b'),这与打印 a b 的 Python 3.x 不同。 (除非您在 Python 2.x 中使用 from __future__ import print_function 不难找到一种方法使其对两者都适用。例如。 print("hello and that's your sum: " + str(a + b)) @Agostino,如果我真的想使用print 作为函数,我会使用from __future__ import print_function,正如我在之前的评论中提到的那样:) 或print("hello and that's your sum: %s" % (a+b))print("hello and that's your sum: ".format(a+b))【参考方案2】:

我发现这个线程正在寻找有关处理参数的信息; this easy guide 太酷了:

import argparse

parser = argparse.ArgumentParser(description='Script so useful.')
parser.add_argument("--opt1", type=int, default=1)
parser.add_argument("--opt2")

args = parser.parse_args()

opt1_value = args.opt1
opt2_value = args.opt2

运行方式:

python myScript.py --opt2 = 'hi'

【讨论】:

感谢您与参考分享此内容,其中很好地总结了 py 参数的最常见用法。【参考方案3】:

以下是之前总结的所有答案:

模块应在函数之外导入。 hello(sys.argv[2]) 需要缩进,因为它在 if 语句中。 hello 有 2 个参数,因此您需要调用 2 个参数。 从终端调用函数,需要调用python .py ...

代码应如下所示:

import sys
def hello(a, b):
    print "hello and that's your sum:"
    sum = a+b
    print sum

if __name__== "__main__":
    hello(int(sys.argv[1]), int(sys.argv[2]))

然后使用以下命令运行代码:

python hello.py 1 1

【讨论】:

【参考方案4】:

要从命令行执行你的程序,你必须调用python解释器,像这样:

C:\Python27>python hello.py 1 1

如果您的代码位于另一个目录中,则必须在 PATH 环境变量中设置 python 二进制路径,才能运行它。您可以找到详细说明here。

【讨论】:

或者直接拼出 python my_full_path\hello.py 1 1 太感谢了,我也这样用过,我定义了环境变量(PATH,path,pathext),没有成功 确保在更改 PATH 时关闭并重新打开您正在使用的控制台。【参考方案5】:

你的缩进被破坏了。这应该可以解决它:

import sys

def hello(a,b):
    print 'hello and thats your sum:'
    sum=a+b
    print sum

if __name__ == "__main__":
    hello(sys.argv[1], sys.argv[2])

显然,如果您将if __name__ 语句放在 函数中,则只有在您运行该函数时才会对其进行评估。问题是:所述语句的重点是首先运行函数。

【讨论】:

非常感谢您提供此代码,它有效,但我想知道真正出了什么问题,以及在哪里可以找到有关它的更多详细信息,非常感谢【参考方案6】:
import sys

def hello(a, b):
    print  'hello and that\'s your sum: 0'.format(a + b)

if __name__ == '__main__':
    hello(int(sys.argv[1]), int(sys.argv[2]))

此外,请参阅@thibauts 关于如何调用 python 脚本的回答。

【讨论】:

【参考方案7】:

代码中有很多错误。

    'import sys' 行应该在函数之外,因为函数本身是使用 sys 函数获取的参数调用的。 如果您想要正确的总和,您应该将参数(字符串)转换为浮点数。将总和行更改为 --> sum = float(a) + float(b)。

    由于您没有为任何函数参数定义任何默认值,因此需要在调用函数时传递两个参数 --> hello(sys.argv[2], sys.argv[2])

    import sys def hello(a,b): print ("hello and that's your sum:") sum=float(a)+float(b) print (sum)

    if __name__ == "__main__": hello(sys.argv[1], sys.argv[2])

此外,使用“C:\Python27>hello 1 1”运行代码看起来不错,但您必须确保该文件位于 Python 知道的目录之一(PATH 环境变量)。因此,请使用完整路径来验证代码。 比如:

C:\Python34>python C:\Users\pranayk\Desktop\hello.py 1 1

【讨论】:

以上是关于如何在 Windows 命令行中使用参数运行 Python 脚本的主要内容,如果未能解决你的问题,请参考以下文章

Argparse 教程示例在 Windows 命令行中不起作用

如何在命令行中使用Docker for Windows,并绕过/禁用GUI?

在windows命令行中如何运行c程序的文本

在python命令行中输入解析参数作为变量?

如何在命令行中运行 ZAP 扫描?

在python交互命令行中如何清屏