Python中从命令行输入变量

3

我想要做的事情非常简单,但我无法找到一个好的、不太复杂的解决方案。基本上,我想定义一些全局变量,这些变量将被用作文件夹名称等。

global folder = "C:\\TEMP\\" + foldername

我希望在运行脚本时,将文件夹名称作为输入值设置,类似于:

python myscript.py --folder somebeautifulfoldername

所以在运行我的脚本时,文件夹将变为C:\ TEMP \ somebeautifulfoldername


你是在询问将"C:\TEMP\"赋值给全局变量还是通过命令行传递值吗? - shaktimaan
1
类似于 https://docs.python.org/2/library/argparse.html#module-argparse 的东西。 - teoreda
@teoreda:你应该在回答中举例说明。 - Kishor Pawar
4个回答

3
您可以像以下方式向Python脚本传递参数:
python test.py arg1 arg2 arg3

这是你将获得的结果

参数列表: ['test.py', 'arg1', 'arg2', 'arg3']

在您的情况下:

python myscript.py 某个漂亮的文件夹名称

folder = "C:\\TEMP\\" + sys.argv[1]


在Python脚本中,如何访问“参数列表”中的这些参数? - semblable

3
您可以使用内置的argparse模块结合从sys.argv获取命令行参数来完成此操作:
import argparse
import sys

if __name__ == '__main__':
    parser = argparse.ArgumentParser(description = 'My script')
    parser.add_argument('--folder', help = "Subfolder of C:\TEMP\ to manipulate")
    args = parser.parse_args(sys.argv[1:])
    folder = "C:\\TEMP\\"+args.folder
    print folder

我在这里只添加了一个非常简单的参数以及一些基本的帮助字符串,但是您可以做很多事情,例如提供默认值,允许使用文件列表而不是单个文件,指定类型等。有关更多详细信息和示例,请参阅手册。

用法:

>python myscript.py --folder somebeautifulfoldername
C:\TEMP\somebeautifulfoldername

>python myscript.py --help
usage: tmp.py [-h] [--folder FOLDER]

My script

optional arguments:
  -h, --help       show this help message and exit
  --folder FOLDER  Subfolder of C:\TEMP\ to manipulate

1
import sys

folder = "none"
if("--folder" in  sys.argv):
    folder = sys.argv[sys.argv.index("--folder") + 1]        
print folder

如果你按照自己想要的方式运行它:
python myscript.py --folder "HELLOFOLDER"

它将会输出:HELLOFOLDER。

0

有许多选项可以将命令行参数解析到Python脚本中。例如,标准库的optparseargparse

一个非常好用的第三方工具是docopt,它允许您通过直接将脚本用法描述为脚本文档来轻松编写上述逻辑,如下所示:

"""My script

Usage:
  myscript.py --folder=<folder>

Options:
  -h --help             Show this screen.
  --version             Show version.
  --folder=<folder>     Choose folder.
"""

from docopt import docopt

if __name__ == '__main__':
    arguments = docopt(__doc__, version='myscript 1.0')
    folder = "C:\\TEMP\\" + arguments["--folder"]
    print(folder)

话虽如此,您可能还想研究tempfile以生成临时文件,使脚本更具跨平台性。硬编码Windows特定路径很少是一个好主意。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接