python运行程序时传入相关参数的实现

python运行程序时传入相关参数的实现


方式一:使用

代码举例如下所示:利用argparse模块

if __name__ == '__main__':
	import argparse
    parser = argparse.ArgumentParser()
    parser.add_argument('--video_name', type=str, default=r'D:\PycharmProjects\temp_file\movie.mp4', help='original video name')
    parser.add_argument('--result_name', type=str, default=r'D:\PycharmProjects\temp_file\result\result.mp4', help='result name')
    parser.add_argument('--fps', type=int, default=None, help='Specify the playback frame rate')
    parser.add_argument('--scale', type=float, default='2', help='Change the original video speed')
    opt = parser.parse_args()
    print(opt)
    video_speed(opt.video_name, opt.result_name, opt.fps, opt.scale)

方式二:利用sys模块

利用 sys.argv 实现:代码举例如下所示:

import socket
import re
import multiprocessing
import time
# import dynamic.mini_frame
import sys


class WSGIServer(object):
    def __init__(self, port, app, static_path):
        # 1. 创建套接字
        self.tcp_server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
        self.tcp_server_socket.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)

        # 2. 绑定
        self.tcp_server_socket.bind(("", port))

        # 3. 变为监听套接字
        self.tcp_server_socket.listen(128)

        self.application = app
        self.static_path = static_path

    def service_client(self, new_socket):
        """为这个客户端返回数据"""

        # 1. 接收浏览器发送过来的请求 ,即http请求  
        # GET / HTTP/1.1
        # .....
        request = new_socket.recv(1024).decode("utf-8")
        # print(">>>"*50)
        # print(request)

        request_lines = request.splitlines()
        print("")
        print(">"*20)
        print(request_lines)

        # GET /index.html HTTP/1.1
        # get post put del
        file_name = ""
        ret = re.match(r"[^/]+(/[^ ]*)", request_lines[0])
        if ret:
            file_name = ret.group(1)
            # print("*"*50, file_name)
            if file_name == "/":
                file_name = "/index.html"

        # 2. 返回http格式的数据,给浏览器
        # 2.1 如果请求的资源不是以.html结尾,那么就认为是静态资源(css/js/png,jpg等)
        if not file_name.endswith(".html"):
            try:
                f = open(self.static_path + file_name, "rb")
            except:
                response = "HTTP/1.1 404 NOT FOUND\r\n"
                response += "\r\n"
                response += "------file not found-----"
                new_socket.send(response.encode("utf-8"))
            else:
                html_content = f.read()
                f.close()
                # 2.1 准备发送给浏览器的数据---header
                response = "HTTP/1.1 200 OK\r\n"
                response += "\r\n"
                # 2.2 准备发送给浏览器的数据---boy
                # response += "hahahhah"

                # 将response header发送给浏览器
                new_socket.send(response.encode("utf-8"))
                # 将response ic.mini_frame.applicationbody发送给浏览器
                new_socket.send(html_content)
        else:
            # 2.2 如果是以.py结尾,那么就认为是动态资源的请求

            env = dict()  # 这个字典中存放的是web服务器要传递给 web框架的数据信息
            env['PATH_INFO'] = file_name
            # {"PATH_INFO": "/index.py"}
            # body = dynamic.mini_frame.application(env, self.set_response_header)
            body = self.application(env, self.set_response_header)

            header = "HTTP/1.1 %s\r\n" % self.status

            for temp in self.headers:
                header += "%s:%s\r\n" % (temp[0], temp[1])

            header += "\r\n"

            response = header+body
            # 发送response给浏览器
            new_socket.send(response.encode("utf-8"))


        # 关闭套接
        new_socket.close()

    def set_response_header(self, status, headers):
        self.status = status
        self.headers = [("server", "mini_web v8.8")]
        self.headers += headers
        

    def run_forever(self):
        """用来完成整体的控制"""

        while True:
            # 4. 等待新客户端的链接
            new_socket, client_addr = self.tcp_server_socket.accept()

            # 5. 为这个客户端服务
            p = multiprocessing.Process(target=self.service_client, args=(new_socket,))
            p.start()

            new_socket.close()


        # 关闭监听套接字
        self.tcp_server_socket.close()


def main():
    """控制整体,创建一个web 服务器对象,然后调用这个对象的run_forever方法运行"""
    if len(sys.argv) == 3:
        try:
            port = int(sys.argv[1])  # 7890
            frame_app_name = sys.argv[2]  # mini_frame:application
        except Exception as ret:
            print("端口输入错误。。。。。")
            return
    else:
        print("请按照以下方式运行:")
        print("python3 xxxx.py 7890 mini_frame:application")
        return
    
    # mini_frame:application
    ret = re.match(r"([^:]+):(.*)", frame_app_name)
    if ret:
        frame_name = ret.group(1)  # mini_frame
        app_name = ret.group(2)  # application
    else:
        print("请按照以下方式运行:")
        print("python3 xxxx.py 7890 mini_frame:application")            # python web_server.py 7890 mini_frame:application
        return

    with open("./web_server.conf") as f:
        conf_info = eval(f.read())

    # 此时 conf_info是一个字典里面的数据为:
    # {
    #     "static_path":"./static",
    #     "dynamic_path":"./dynamic"
    # }


    sys.path.append(conf_info['dynamic_path'])

    # import frame_name --->找frame_name.py
    frame = __import__(frame_name)  # 返回值标记这 导入的这个模板
    app = getattr(frame, app_name)  # 此时app就指向了 dynamic/mini_frame模块中的application这个函数

    # print(app)7890 mini_frame:application

    wsgi_server = WSGIServer(port, app, conf_info['static_path'])
    wsgi_server.run_forever()


if __name__ == "__main__":
    main()


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 在cmd窗口中运行Python程序,可以通过以下方式输入路径来使用argc参数。 首先,在cmd窗口中使用cd命令切换到Python程序所在的目录。例如,如果你的Python程序位于C:\MyCode目录下,可以输入以下命令: ```shell cd C:\MyCode ``` 然后,可以使用python命令运行Python程序。例如,假设你的Python程序文件名为program.py,需要接受一个路径参数,可以按照以下格式输入命令: ```shell python program.py <路径参数> ``` 其中,<路径参数>是你想要输入的路径。例如,如果你想要传递C:\Test作为路径参数,可以输入以下命令: ```shell python program.py C:\Test ``` 在Python程序中,可以通过sys模块中的argv变量获取到这个路径参数。例如,在program.py中可以添加以下代码来获取并打印路径参数: ```python import sys path = sys.argv[1] print("路径参数为:", path) ``` 这样,在运行程序,cmd窗口会将输入的路径作为argc的值传递给Python程序程序可以通过sys.argv[1]获取到这个值,并进行后续操作。 ### 回答2: 在cmd窗口运行Python程序,可以通过sys模块中的argv变量来获取命令行参数。argv是一个列表,包含了运行程序传递的所有参数,其中第一个参数程序的名称本身。如果想要传递一个文件路径给Python程序,可以在cmd窗口中输入程序名称和文件路径作为命令行参数。 假设有一个名为test.py的Python程序,现在想要在cmd窗口中输入一个文件路径作为参数。可以按照以下步骤进行操作: 1. 打开cmd窗口。可以通过在开始菜单中搜索cmd并点击打开来进入cmd窗口。 2. 切换到Python程序所在的目录。可以使用cd命令进入指定的目录。 例如,如果test.py文件位于D盘的code文件夹下,可以在cmd窗口中输入以下命令: ``` D: cd code ``` 3. 运行Python程序传入文件路径参数。可以使用python命令加上Python程序名称及文件路径作为参数。 例如,如果要传递一个名为example.txt的文件路径给test.py程序,可以在cmd窗口中输入以下命令: ``` python test.py example.txt ``` 4. Python程序中可以通过sys模块的argv变量来获取命令行参数。在test.py程序中添加以下代码: ```python import sys if len(sys.argv) > 1: file_path = sys.argv[1] # 获取文件路径参数 # 其他操作 ``` 这样,在cmd窗口中输入文件路径作为命令行参数Python程序就能够通过sys.argv[1]获取到该路径。注意,路径需要根据实际文件所在位置进行相应的更改。 ### 回答3: 在cmd窗口运行Python程序,我们可以通过输入参数来为`argc`赋值。以下是如何在cmd窗口输入路径来赋值给`argc`的示例: 1. 首先,打开cmd窗口。 2. 确保你已经安装了Python并设置了系统路径。 3. 在cmd窗口中输入`python`,然后按下空格键。 4. 在空格后输入要运行Python程序的路径,例如`C:\Users\Username\Documents\test.py`,然后按下空格键。 5. 如果你的Python程序需要参数,接着输入参数,以空格分隔。例如,如果你的程序需要接受一个名为"input.txt"的路径参数,你可以输入`input.txt`,然后按下回车键。 6. Python将从cmd窗口中读取输入的路径和参数,并将它们赋值给`argc`。 7. Python将开始执行程序并输出结果。 需要注意的是,输入的路径应该是有效的,并且在cmd窗口中输入路径,你可以使用反斜杠(\)或正斜杠(/)来分隔文件夹和文件名。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值