如何在 python manage.py 中使用命令行参数

Roh*_*ani 2 python django

当我运行下图所示的命令时出现错误

在此输入图像描述

python manage.py shell <processing.py 66
Run Code Online (Sandbox Code Playgroud)

错误是

usage: manage.py shell [-h] [--version] [-v {0,1,2,3}] [--settings SETTINGS]
                   [--pythonpath PYTHONPATH] [--traceback] [--no-color]
                   [--plain] [--no-startup] [-i {ipython,bpython,python}]
                   [-c COMMAND]
Run Code Online (Sandbox Code Playgroud)

我认为这不是使用 shell 时传递参数的正确方法。我不能直接写

python processing.py
Run Code Online (Sandbox Code Playgroud)

因为我正在使用数据库过滤,所以我必须使用 shell。

这是我的处理.py

import os
import sys
from webapp.models import status


dirname = sys.argv[1]

print(os.getcwd())
sta = status.objects.filter(status_id=66)[0]
sta.status = True
sta.save()
print(sta.status)
Run Code Online (Sandbox Code Playgroud)

提前致谢

Fli*_*rPA 5

看起来您想创建一个自定义管理命令,如评论中所述。下面是一个示例,它将打印传递的命令行参数,该参数应放置在应用程序中的类似位置myapp/management/commands/say.py并使用 调用python manage.py say --printme StackOverFlow

from django.core.management.base import BaseCommand


class Command(BaseCommand):
    """
    This command will print a command line argument.
    """
    help = 'This command will import locations from a CSV file into the hivapp Locations model.'

    def add_arguments(self, parser):
        parser.add_argument(
            '--printme',
            action='store',
            dest='printme',
            default="Hello world!",
            help='''The string to print.'''
        )

    def handle(self, *args, **options):
        print(options['printme'])
Run Code Online (Sandbox Code Playgroud)

您可以传递一个文件名来迭代要运行的命令列表,尽管将这些命令合并到您的命令中会更安全。祝你好运!