Hướng dẫn execute python script from yaml file - thực thi tập lệnh python từ tệp yaml

Việc sử dụng các thẻ python tùy chỉnh pyyaml ​​có thể thực hiện điều này mà không cần thêm mã.

https://pyyaml.org/wiki/PyYAMLDocumentation#yaml-tags-and-python-types

Đối với ví dụ danh sách trong câu hỏi:

list: !!python/object/apply:numpy.arange [1,5]

Ví dụ về Python làm việc:

import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}

Bạn có thể tận dụng điều này hơn nữa để làm một số điều điên rồ với eval từ tệp yaml. Mã sau đây có thể được sử dụng để biên dịch các chức năng được phát ra từ quá trình xử lý YAML. (Eval thường bị giới hạn trong một câu lệnh)

Ví dụ này hoạt động cho tôi trên Windows Cpython 3.9 với Pyyaml ​​6.0. (Hack trình biên dịch để rút ra đối tượng mã nội bộ có thể bị hỏng trên một phiên bản khác)

import yaml
s = """"""
y = yaml.load(s, yaml.Loader)
assert y['add_one'](1) == 2
assert not y['is_instance_int']('foo')
assert y['function_result'] == 7

Đầu vào YAML

# this creates a compiler object that can be used to return a compiled function from string code without using exec
# there is some trickiness because we must pass in the builtins module into global list using __builtins__
compile_to_function: &compiler !!python/object/apply:eval
    - |
        function_type(
           # the inner function code is the first code object attached to the outer code in co_consts
           [c for c in compile(code, '__dynamic__', 'exec').co_consts if isinstance(c,code_type)][0],
           {'function_type': function_type, 'code_type': code_type, **__builtins__, '__builtins__': __builtins__}
        )
    - function_type: !!python/name:types.FunctionType
      code_type: !!python/name:types.CodeType
      code: |
        def compile_to_function(code):
            return function_type([c for c in compile(code, '', 'exec').co_consts if isinstance(c, code_type)][0], __builtins__)


# some examples of compiling things
add_one: &add_one !!python/object/apply:eval
    - compiler(code)
    - compiler: *compiler
      code: |
        def add_one(x):
            x = x + 1
            return x

is_instance_int: !!python/object/apply:eval
    - compiler(code)
    - compiler: *compiler
      # note here that isinstance needs the builtins to be present
      code: |
        def is_instance_int(x):
            return isinstance(x, int)

function_result: !!python/object/apply:eval
    - add_one(1*2*3)
    - add_one: *add_one

Bài viết này nhằm phác thảo những điều cơ bản của YAML và viết một tập lệnh Python đơn giản đọc chi tiết cấu hình từ tệp YAML.

Yaml là gì?

  • Ngôn ngữ đánh dấu YAML AIN là ngôn ngữ tuần tự dữ liệu có thể đọc được của con người (mã hóa các đối tượng thành định dạng khác)
  • Nó là một siêu json với các tính năng bổ sung như bình luận, neo, bí danh, v.v.
  • Được sử dụng bởi nhiều ngôn ngữ lập trình và đơn giản để thể hiện ánh xạ phức tạp do đó được sử dụng làm ngôn ngữ cấu hình
  • Các tệp YAML được tạo với các tiện ích mở rộng.
  • Hỗ trợ nhiều tài liệu trong một tệp

Khái niệm cơ bản của Yaml

Cấu trúc của YAML là một cặp giá trị khóa. Khóa là một chuỗi và giá trị có thể là bất kỳ loại. Các loại dữ liệu được hỗ trợ bởi YAML là boolean, chuỗi, số nguyên, float, mảng, từ điển. Thắng của khoảng trắng được sử dụng để biểu thị cấu trúc. YAML xác định loại dựa trên giá trị, sử dụng trích dẫn đơn hoặc đôi trong khi sử dụng các ký tự đặc biệt.

Hình ảnh dưới đây là kết quả của YAML được chuyển đổi thành JSON, các bình luận bị bỏ qua.

Yaml chuyển đổi thành json

Nâng cao yaml

Nâng cao yaml

Bắt đầu

Chúng tôi sẽ tạo một dự án đơn giản bao gồm một tập lệnh Python đọc chi tiết cấu hình cơ sở dữ liệu từ tệp YAML, một khi kết nối được thiết lập, nó thực hiện các hoạt động CRUD.

1. Cài đặt

  • Tải xuống MongoDB và tạo một cơ sở dữ liệu có tên là College, bộ sưu tập có tên Student_info. Cho phép xác thực trên cơ sở dữ liệu.
  • Cài đặt thư viện pyyaml

2. Mã

  • Config.yml chứa các chi tiết cấu hình cơ sở dữ liệu như URL, cổng, tên người dùng được mã hóa, mật khẩu được mã hóa, tên cơ sở dữ liệu, tên thu thập.
  • script.py đọc config.yml và thiết lập kết nối cơ sở dữ liệu và sau đó thực hiện các hoạt động crud

3. Chạy

Chạy tập lệnh.py

Sự kết luận

Trong câu chuyện này, chúng ta đã thấy những điều cơ bản của YAML và tạo ra một dự án đơn giản bao gồm một tập lệnh Python đọc chi tiết cấu hình cơ sở dữ liệu từ một tệp YAML. YAML dễ nhìn hơn về mặt trực quan và các tính năng nâng cao của nó như bình luận, neo, bí danh làm cho nó tốt hơn JSON.

Hy vọng bạn đã hiểu những điều cơ bản của Yaml.

Cảm ơn vì đã đọc!

Trang web GitHub LinkedIn

Bỏ qua nội dung chính

Trình duyệt này không còn được hỗ trợ.

Nâng cấp lên Microsoft Edge để tận dụng các tính năng mới nhất, cập nhật bảo mật và hỗ trợ kỹ thuật.

Nhiệm vụ kịch bản Python

  • Bài báo
  • 09/08/2022
  • 2 phút để đọc

Trong bài viết này

Dịch vụ Azure DevOps

Sử dụng nhiệm vụ này để chạy tập lệnh Python.

Snippet Yaml

# Python script
# Run a Python file or inline script
- task: PythonScript@0
  inputs:
    #scriptSource: 'filePath' # Options: filePath, inline
    #scriptPath: # Required when scriptSource == filePath
    #script: # Required when scriptSource == inline
    #arguments: # Optional
    #pythonInterpreter: # Optional
    #workingDirectory: # Optional
    #failOnStderr: false # Optional

Tranh luận

Tranh luậnSự mô tả
scriptSourceType
Type
(Yêu cầu) Loại tập lệnh đích: Đường dẫn tệp hoặc nội tuyến
Đường dẫn scriptPathScript
Script Path
(Yêu cầu khi scriptSource == filePath) Đường dẫn của tập lệnh để thực thi. Phải là một đường dẫn đủ điều kiện hoặc liên quan đến $ (System.DefaultWorkingDirectory).
scriptScript
Script
(Yêu cầu khi scriptSource ==
import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}
1) Tập lệnh Python để chạy
import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}
2Argument
Arguments
(Tùy chọn) Một chuỗi chứa các đối số được truyền cho tập lệnh. Chúng sẽ có sẵn thông qua
import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}
3 như thể bạn đã vượt qua chúng trên dòng lệnh.
import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}
4Python phiên dịch
Python interpreter
(Tùy chọn) Đường dẫn tuyệt đối đến trình thông dịch Python để sử dụng. Nếu không được chỉ định, nhiệm vụ giả định một trình thông dịch Python có sẵn trên đường dẫn và chỉ cần cố gắng chạy lệnh
import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}
5.
Thư mục
import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}
6
Working directory
(Không bắt buộc)
import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}
7Fail về lỗi tiêu chuẩn
Fail on standard error
(Tùy chọn) Nếu đúng, nhiệm vụ này sẽ thất bại nếu bất kỳ văn bản nào được ghi vào
import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}
8.

Tùy chọn kiểm soát nhiệm vụ

Nhận xét

Theo mặc định, nhiệm vụ này sẽ gọi

import yaml; yaml.load("list: !!python/object/apply:numpy.arange [1,5]", yaml.Loader)
Out[0]: {'list': array([1, 2, 3, 4])}
5 từ đường dẫn hệ thống. Chạy sử dụng phiên bản Python để đặt phiên bản bạn muốn vào đường dẫn hệ thống.

Mã nguồn mở

Nhiệm vụ này là nguồn mở trên GitHub. Phản hồi và đóng góp được hoan nghênh.

Nhận xét

Gửi và xem phản hồi cho

Làm cách nào để chạy kịch bản Python trong YAML?

1. Cài đặt. Tải xuống MongoDB và tạo một cơ sở dữ liệu có tên là College, bộ sưu tập có tên Student_info. Cho phép xác thực trên cơ sở dữ liệu. ....
Mã số. Cấu hình. YML chứa các chi tiết cấu hình cơ sở dữ liệu như URL, cổng, tên người dùng được mã hóa, mật khẩu được mã hóa, tên cơ sở dữ liệu, tên thu thập. ....
Chạy. Chạy tập lệnh.py ..

Làm cách nào để thực hiện một tệp .py?

Để chạy các tập lệnh Python bằng lệnh Python, bạn cần mở một dòng lệnh và nhập từ python, hoặc python3 nếu bạn có cả hai phiên bản, theo sau là đường dẫn đến tập lệnh của bạn, giống như thế này: $ python3 hello.py xin chàoThế giới!Nếu mọi thứ hoạt động ổn, sau khi bạn nhấn Enter, bạn sẽ thấy cụm từ Hello World!open a command-line and type in the word python , or python3 if you have both versions, followed by the path to your script, just like this: $ python3 hello.py Hello World! If everything works okay, after you press Enter , you'll see the phrase Hello World!

Làm cách nào để đọc tệp cấu hình yaml trong Python?

Đọc khóa từ tệp cấu hình YAML Chúng ta có thể đọc dữ liệu bằng YAML.Phương thức LOAD () lấy con trỏ tệp và trình tải làm tham số.Fullloader xử lý việc chuyển đổi từ các giá trị vô hướng YAML sang từ điển Python.Chỉ mục [0] được sử dụng để chọn thẻ chúng tôi muốn đọc.using yaml. load() method which takes file pointer and Loader as parameters. FullLoader handles the conversion from YAML scalar values to the Python dictionary. The index [0] is used to select the tag we want to read.

Tập tin Python Yaml hoạt động như thế nào?

YAML tự nhiên hỗ trợ ba loại dữ liệu cơ bản: vô hướng (như chuỗi, số nguyên và phao), danh sách và mảng kết hợp.Phần mở rộng tên tệp được đề xuất chính thức cho các tệp YAML đã được.Yaml.Có hai mô -đun trong Python cho Yaml: Pyyaml và Ruamel.There are two modules in Python for YAML: PyYAML and ruamel.