首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >是否可以从windows命令提示符运行python脚本并同时传递该脚本的参数?

是否可以从windows命令提示符运行python脚本并同时传递该脚本的参数?
EN

Stack Overflow用户
提问于 2018-04-10 21:40:23
回答 3查看 511关注 0票数 2

我有一个保存下来的python脚本。我在Windows 10中的命令提示符中运行这个python脚本。

这很简单,只要导航到脚本所在的目录,然后键入:

代码语言:javascript
复制
python myscript.py

剧本会运行得很好。

但是,有时,我希望运行这个脚本,以便将脚本中的变量设置为一个值,有时设置为另一个值。这个变量告诉脚本要通过哪个端口来操作API连接(如果相关的话)。

目前,我每次都会进入脚本,并将变量更改为我想要的变量,然后运行脚本。是否有方法在Windows 10中命令提示符运行脚本时设置变量?

或者,在运行时是否有其他有效的解决方案来实现同样的灵活性?

谢谢

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-04-10 21:47:56

通常的方法是使用命令行参数。实际上,在传递文件名列表之后,传递端口号几乎是命令行参数的范例。

对于简单的情况,您可以使用sys.argv在代码中处理这个问题。

代码语言:javascript
复制
port = int(sys.argv[1])

或者,如果您想要一个默认值:

代码语言:javascript
复制
port = int(sys.argv[1]) if len(sys.argv) > 1 else 12345

然后,运行该程序:

代码语言:javascript
复制
python myscript.py 54321

对于更复杂的情况--当您有多个标志时,有些标志具有值,等等--您通常希望使用类似于argparse的东西。但是,您可能希望在设计第一个命令行接口之前,先阅读一下典型的命令行接口,然后再看看常用工具的参数。因为仅仅看一下argparse中的所有选项,而事先不知道您想要的是什么,可能会非常令人难以抗拒。

另一种选择是使用环境变量。如果您想为每次运行更改它,但是如果您想在命令行会话中为整个系列的运行设置一次,或者甚至设置一个计算机范围的默认设置,那么这就更简单了。

在代码中,您可以查看os.environ

代码语言:javascript
复制
port = int(os.environ.get('MYSCRIPT_PORT', 12345))

然后,设置一个端口:

代码语言:javascript
复制
MYSCRIPT_PORT=54321
python myscript.py

您可以将两者结合起来:如果存在命令行参数,则使用命令行参数,否则返回到环境变量,否则返回到默认状态。甚至添加配置文件和/或(如果您只关心Windows)注册表设置。Python本身做了一些类似于三步后退的事情,就像许多主要的服务器一样,但是对于简单的用例来说,它可能是过分的。

票数 3
EN

Stack Overflow用户

发布于 2018-04-10 21:50:44

你应该看看at解析。以下是一个例子:

代码语言:javascript
复制
import argparse

parser = argparse.ArgumentParser()
parser.add_argument("-m", help='message to be sent', type=str)
args = (parser.parse_args())

print args.m

您创建的每个参数都像字典一样保存,所以您必须在代码中调用它,就像我对print语句所做的那样。

代码语言:javascript
复制
"args.m" < ---- This specifies the argument passed you want to do stuff with

以下是我的输入/输出:

代码语言:javascript
复制
C:\Users\Vinny\Desktop>python argtest.py -m "Hi"
Hi

C:\Users\Vinny\Desktop>

更多关于More解析的信息:https://docs.python.org/3/library/argparse.html

票数 1
EN

Stack Overflow用户

发布于 2018-04-10 21:47:42

页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49763252

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档