我如何拥有a)可以接受用户输入的Python脚本以及如何使用b)如果从命令行运行,则读入参数?
我使用python来创建我的项目设置设置,但我需要帮助获取命令行参数.
我在终端试了这个:
$python myfile.py var1 var2 var3
Run Code Online (Sandbox Code Playgroud)
在我的Python文件中,我想使用所有输入的变量.
解析Python命令行参数的最简单,最简洁,最灵活的方法或库是什么?
我现在正在教自己Python,只是想简单地说(参考下面的例子)sys.argv [1]代表什么.它只是要求输入吗?
#!/usr/bin/python3.1
# import modules used here -- sys is a very standard one
import sys
# Gather our code in a main() function
def main():
print ('Hello there', sys.argv[1])
# Command line args are in sys.argv[1], sys.argv[2] ..
# sys.argv[0] is the script name itself and can be ignored
# Standard boilerplate to call the main() function to begin
# the program.
if __name__ == '__main__':
main()
Run Code Online (Sandbox Code Playgroud) 是否可以先运行程序,然后在命令行中等待用户的输入.例如
Run...
Process...
Input from the user(in command line form)...
Process...
Run Code Online (Sandbox Code Playgroud) 如果我期待001或999之类的东西(让我们将期望限制在001 ... 999范围内),并且很少有其他参数通过,并且想要忽略任何意外,那么处理命令行参数将是一个简单的表达式?
我理解,例如,我需要找出参数之间是否传递"debug",它将是这样的:
if 'debug' in argv[1:]:
print 'Will be running in debug mode.'
Run Code Online (Sandbox Code Playgroud)
如何确定009或575是否通过?
所有这些都是预期的电话:
python script.py
python script.py 011
python script.py 256 debug
python script.py 391 xls
python script.py 999 debug pdf
Run Code Online (Sandbox Code Playgroud)
在这一点上,我不关心这样的电话:
python script.py 001 002 245 568
python script.py some unexpected argument
python script.py 0001
python script.py 02
Run Code Online (Sandbox Code Playgroud)
......第一个 - 因为有多个"数字"参数; 第二 - 因为...好,意外的论点; 第三和第四 - 因为非3位数的参数.
作为中提到的文档中optparse.OptionParser使用的IndentedHelpFormatter输出格式选项的帮助,对此,我发现了一些API文档.
我想在使用文本中显示所需的位置参数的类似格式的帮助文本.是否有适配器或简单的使用模式可用于类似的位置参数格式化?
优选仅使用stdlib.Optparse确实很棒,除了这个格式细微差别,我觉得我们应该能够修复而不导入整个其他包.:-)
python formatting command-line optparse command-line-arguments
from sys import argv
script, lira_cbt, [eur_hedge] = argv
if eur_hedge == None:
#Do x
else:
#Do y
Run Code Online (Sandbox Code Playgroud)
我希望它能够只使用lira_cbt作为参数(执行x),或者使用lira_cbt和eur_hedge(执行y)运行.可以用sys.argv实现吗?
实现命令行UI的"最干净"方式是什么,类似于git,例如:
git push origin/master
git remote add origin git://example.com master
Run Code Online (Sandbox Code Playgroud)
理想情况下还允许更灵活的解析,例如,
jump_to_folder app theappname v2
jump_to_folder app theappname source
jump_to_folder app theappname source v2
jump_to_folder app theappname build v1
jump_to_folder app theappname build 1
jump_to_folder app theappname v2 build
Run Code Online (Sandbox Code Playgroud)
jump_to_folder是脚本名称,app是命令,theappname是"固定位置"参数,"构建"和"v2"等是参数(例如,可能的参数是任何数字/任何前缀为av的数字,或者build/source/TMP /配置)
我可以用一系列if/ else/ 手动解析参数elifs,但必须有更优雅的方法来做到这一点?
作为一个完全理论上的例子,我可以描述UI模式..
app:
fixed: application_name
optional params:
arg subsection:
"build"
"source"
"tmp"
"config"
arg version:
integer
"v" + integer
Run Code Online (Sandbox Code Playgroud)
然后通过上面的模式解析提供的参数,并获取一个字典:
>>> print schema.parse(["app", "theappname", "v1", "source"])
{ …Run Code Online (Sandbox Code Playgroud) 我正在使用 python 3.7 和操作系统库。我必须在 STAGE 和 TEST 环境中运行一系列测试。当前代码将环境设置为 STAGE
环境 = os.getenv('ENV', 'STAGE')
但我希望通过命令行传递参数来设置它。任何人?
python ×10
command-line ×6
input ×2
formatting ×1
optparse ×1
pytest ×1
python-2.7 ×1
user-input ×1