如何在 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 命令行中不起作用