选择要在Python中从命令行执行的程序部分

时间:2018-03-02 14:11:42

标签: python

我有一个很棒的计划,比如my_program.py。我想用两个选项执行,例如1或2.如果选择了选项1(python my_program.py 1),我希望my_program.py执行代码的某些部分(特别是第70到117行和注释行) 118到130),如果选择2,我想要相反的行为(注释/停用第70到117行并取消注释/激活第118到130行)。

我知道argparse要从命令行读取,但是你有一个(相对)干净的解决方案吗?

4 个答案:

答案 0 :(得分:2)

看看优秀的图书馆Click。它允许您将程序包装到从命令行调用时作为程序命令的函数。

您的主文件看起来像这样:

import click

@click.command()
@click.option('--count', default=1, help='Number of greetings.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def hello(count, name):
    """Run lines 70 to 117."""
    for x in range(count):
        click.echo('Hello %s!' % name)

@click.command()
@click.option('--count', default=1, help='Number of farewells.')
@click.option('--name', prompt='Your name',
              help='The person to greet.')
def bye(count, name):
    """Run lines 118 to 130."""
    for x in range(count):
        click.echo('Bye %s!' % name)

if __name__ == '__main__':
    hello()

您可以在命令行执行它,如:

$ python3 my_program.py hello

答案 1 :(得分:1)

您可以在python中使用 sys 模块

import sys

if sys.argv[1] == 1:
  ---
elif sys.argv[1] == 2:
  ---

答案 2 :(得分:1)

您应该将代码组织成函数,例如。

<android.support.design.widget.AppBarLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbarMain"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize" />

</android.support.design.widget.AppBarLayout>

这样您就可以选择要调用的代码:

def Function1():
    # Some code


def Function2():
    # And more code

要根据参数调用函数,可以使用条件表达式:

Function1() # invoke code included in "Function1"
Function2() # or in Function2

或(更好的解决方案)使用字典:

arg = sys.argv[1] # get entered argument

if arg == "1":
    Function1()
elif arg == "2":
    Function2()

所以整个文件看起来像这样:

jobs = {"1" : Function1, "2" : Function2} # Relate arguments with functions
arg = sys.argv[1]
jobs[arg]() # invoke function

另外,我建议你阅读有关函数的内容,这些函数是编程的基础 - https://docs.python.org/3/tutorial/controlflow.html#defining-functions

答案 3 :(得分:1)

Python Fire是一种在Python中创建CLI并由Google支持的简单方法 https://github.com/google/python-fire

import fire

class Calculator(object):
  """A simple calculator class."""

  def double(self, number):
    return 2 * number

if __name__ == '__main__':
  fire.Fire(Calculator)


output:
    python calculator.py double 10  # 20
    python calculator.py double --number=15  # 30