Hướng dẫn how do i change python code to terminal? - làm cách nào để thay đổi mã python thành thiết bị đầu cuối?

Tôi đang làm việc trong một

python3 -i pythonfile.py
3 thông qua
python3 -i pythonfile.py
4.

Thông qua thiết bị đầu cuối, tôi muốn mở, chỉnh sửa và lưu tệp

python3 -i pythonfile.py
5. Tôi làm nó như thế nào?

Cảm ơn sự giúp đỡ của bạn.

Hướng dẫn how do i change python code to terminal? - làm cách nào để thay đổi mã python thành thiết bị đầu cuối?

WWII

22.2K7 Huy hiệu vàng36 Huy hiệu bạc75 Huy hiệu Đồng7 gold badges36 silver badges75 bronze badges

Khi được hỏi ngày 18 tháng 5 năm 2018 lúc 22:00May 18, 2018 at 22:00

Hướng dẫn how do i change python code to terminal? - làm cách nào để thay đổi mã python thành thiết bị đầu cuối?

2

Cách dễ nhất là sử dụng vim

vim your_script.py

Chỉnh sửa tệp của bạn và lưu nó bằng cách sử dụng: w hoặc: x

Bạn cũng có thể sử dụng Emacs hoặc Nano

Đã trả lời ngày 18 tháng 5 năm 2018 lúc 22:03May 18, 2018 at 22:03

Kirill Korolevkirill KorolevKirill Korolev

9062 Huy hiệu vàng9 Huy hiệu bạc22 Huy hiệu đồng2 gold badges9 silver badges22 bronze badges

1

Bạn cũng phải nhập một lệnh như tôi để vào chế độ chèn. Sau đó đánh ESC và: WQ để lưu và bỏ. Nếu bạn đang sử dụng thiết bị đầu cuối thường có thể hữu ích để có một bảng gian lận

Đã trả lời ngày 18 tháng 5 năm 2018 lúc 22:14May 18, 2018 at 22:14

Hoặc là:

python3 -i pythonfile.py

Lúc đó bạn sẽ nhập trình soạn thảo Python sau khi đóng chương trình hoặc

Sử dụng trình soạn thảo văn bản như Nano (vì nó được cài đặt theo mặc định với hầu hết các hệ điều hành) hoặc Emacs, cũng là trình soạn thảo văn bản Terminal tuyệt vời.

nano pythonfile.py

emacs pythonfile.py -nw

(-NW là chế độ không GUI)

Đã trả lời ngày 3 tháng 1 năm 2020 lúc 7:31Jan 3, 2020 at 7:31

Bạn có thể chỉ cần sử dụng một trình soạn thảo như VI, VIM hoặc Nano:

$ vi myFile.py

Đã trả lời ngày 18 tháng 5 năm 2018 lúc 22:04May 18, 2018 at 22:04

SamuelsamuelSamuel

7615 Huy hiệu bạc21 Huy hiệu đồng5 silver badges21 bronze badges

Tôi đã viết, sử dụng và thấy rất nhiều kịch bản lỏng lẻo trong sự nghiệp của tôi. Họ bắt đầu với một người cần phải bán tự động một số nhiệm vụ. Sau một thời gian, họ phát triển. Họ có thể thay đổi bàn tay nhiều lần trong đời. Tôi thường mong muốn một cảm giác giống như công cụ dòng lệnh hơn trong các tập lệnh đó. Nhưng thật khó để tăng mức chất lượng từ tập lệnh một lần sang một công cụ thích hợp? Hóa ra nó không khó trong Python.

Đoạn đầu đài

Trong bài viết này, tôi bắt đầu với một đoạn trích nhỏ Python. Tôi sẽ thả nó vào một mô-đun

python3 -i pythonfile.py
6 và mở rộng nó bằng
python3 -i pythonfile.py
7 để chấp nhận các đối số dòng lệnh.

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

Tất cả các mẫu mã phi dòng trong bài viết này đều đề cập đến một phiên bản cụ thể của mã bạn có thể tìm thấy tại https://codeberg.org/ofosos/rotoscope. Mỗi cam kết trong repo đó mô tả một số bước có ý nghĩa trong quá trình của bài viết hướng dẫn này.

Đoạn trích này làm một vài điều:

  • Kiểm tra xem có bất kỳ tệp văn bản nào trong đường dẫn được chỉ định trong
    python3 -i pythonfile.py
    
    8 không
  • Nếu nó tồn tại, nó sẽ tạo ra một tên tệp mới với dấu thời gian hiện tại và chuyển tệp sang
    python3 -i pythonfile.py
    
    9
  • Xóa liên kết
    nano pythonfile.py
    
    emacs pythonfile.py -nw
    
    0 hiện tại và tạo một liên kết mới chỉ vào tệp vừa được thêm

Ví dụ, điều này khá nhỏ, nhưng nó cho bạn ý tưởng về quá trình này.

Tạo một ứng dụng với pyscaffold

Đầu tiên, bạn cần cài đặt các mô -đun Python

python3 -i pythonfile.py
6,
python3 -i pythonfile.py
7 và
nano pythonfile.py

emacs pythonfile.py -nw
3.

$ python3 -m pip install scaffold click tox

Sau khi cài đặt

python3 -i pythonfile.py
6, hãy thay đổi thư mục trong đó dự án
nano pythonfile.py

emacs pythonfile.py -nw
5 nằm trong đó, sau đó thực hiện lệnh sau:

$ putup rotoscope -p rotoscope \
--force --no-skeleton -n rotoscope \
-d 'Move some files around.' -l GLWT \
-u http://codeberg.org/ofosos/rotoscope \
--save-config --pre-commit --markdown

Pyscaffold ghi đè lên

nano pythonfile.py

emacs pythonfile.py -nw
6 của tôi, vì vậy hãy khôi phục nó từ Git:

$ git checkout README.md

Pyscaffold đã thiết lập một dự án mẫu hoàn chỉnh trong hệ thống phân cấp tài liệu, mà tôi sẽ không bao gồm ở đây nhưng hãy thoải mái khám phá nó sau. Bên cạnh đó, Pyscaffold cũng có thể cung cấp cho bạn các mẫu tích hợp liên tục (CI) trong dự án của bạn.

  • Bao bì: Dự án của bạn hiện đã được bật PYPI, vì vậy bạn có thể tải nó lên repo và cài đặt nó từ đó.: Your project is now PyPi enabled, so you can upload it to a repo and install it from there.
  • Tài liệu: Dự án của bạn hiện có một hệ thống phân cấp thư mục tài liệu hoàn chỉnh, dựa trên Sphinx và bao gồm một trình xây dựng Readthedocs.org.: Your project now has a complete docs folder hierarchy, based on Sphinx and including a readthedocs.org builder.
  • Kiểm tra: Dự án của bạn hiện có thể được sử dụng với trình chạy thử TOX và thư mục thử nghiệm chứa tất cả các nồi hơi cần thiết để chạy các thử nghiệm dựa trên pytest.: Your project can now be used with the tox test runner, and the tests folder contains all necessary boilerplate to run pytest-based tests.
  • Quản lý phụ thuộc: Cả cơ sở hạ tầng bao bì và bao bì cần một cách để quản lý các phụ thuộc. Tệp
    nano pythonfile.py
    
    emacs pythonfile.py -nw
    
    7 giải quyết điều này và bao gồm các phụ thuộc.
    : Both the packaging and test infrastructure need a way to manage dependencies. The
    nano pythonfile.py
    
    emacs pythonfile.py -nw
    
    7 file solves this and includes dependencies.
  • Hook tiền cam kết: Điều này bao gồm bộ định dạng nguồn Python "Đen" và trình kiểm tra kiểu Python "Flake8".: This includes the Python source formatter "black" and the "flake8" Python style checker.

Hãy xem thư mục thử nghiệm và chạy lệnh

nano pythonfile.py

emacs pythonfile.py -nw
3 trong thư mục dự án. Nó ngay lập tức xuất ra một lỗi. Cơ sở hạ tầng bao bì không thể tìm thấy gói của bạn.

Bây giờ tạo một thẻ GIT (ví dụ,

nano pythonfile.py

emacs pythonfile.py -nw
9) mà công cụ nhận ra là một phiên bản có thể cài đặt. Trước khi thực hiện các thay đổi, hãy vượt qua
nano pythonfile.py

emacs pythonfile.py -nw
7 được tạo tự động và chỉnh sửa nó phù hợp với trường hợp sử dụng của bạn. Trong ví dụ này, bạn có thể điều chỉnh các mô tả
$ vi myFile.py
1 và dự án. Thêm những thay đổi đó vào khu vực dàn của Git, tôi phải cam kết chúng với Hook đã bị vô hiệu hóa trước. Nếu không, tôi sẽ gặp lỗi vì flake8, trình kiểm tra phong cách Python, phàn nàn về phong cách tệ hại.

$ PRE_COMMIT_ALLOW_NO_CONFIG=1 git commit 

Cũng sẽ rất tuyệt khi có một điểm nhập vào tập lệnh này mà người dùng có thể gọi từ dòng lệnh. Ngay bây giờ, bạn chỉ có thể chạy nó bằng cách tìm tệp

python3 -i pythonfile.py
5 và thực hiện thủ công. May mắn thay, cơ sở hạ tầng bao bì của Python có một cách "đóng hộp" tốt đẹp để biến điều này thành một thay đổi cấu hình dễ dàng. Thêm phần sau vào phần
$ vi myFile.py
3 của
nano pythonfile.py

emacs pythonfile.py -nw
7 của bạn:

console_scripts =
    roto = rotoscope.rotoscope:rotoscope

Thay đổi này tạo ra một lệnh shell có tên

$ vi myFile.py
5, mà bạn có thể sử dụng để gọi tập lệnh rotoscope. Khi bạn cài đặt rotoscope với
$ vi myFile.py
6, bạn có thể sử dụng lệnh
$ vi myFile.py
5.

Đó là điều đó. Bạn có tất cả các bao bì, thử nghiệm và thiết lập tài liệu miễn phí từ pyscaffold. Bạn cũng có một móc tiền trước để giữ cho bạn (chủ yếu) trung thực.

Công cụ CLI

Ngay bây giờ, có những giá trị được mã hóa thành tập lệnh sẽ thuận tiện hơn như các đối số lệnh. Chẳng hạn, hằng số

python3 -i pythonfile.py
8 sẽ tốt hơn như là một tham số dòng lệnh.

Đầu tiên, nhập thư viện nhấp chuột. Chú thích phương thức

$ vi myFile.py
9 với chú thích lệnh được cung cấp bằng cách nhấp và thêm một đối số nhấp chuột vào hàm
nano pythonfile.py

emacs pythonfile.py -nw
5. Click cung cấp một tập hợp các trình xác nhận, vì vậy hãy thêm trình xác nhận đường dẫn vào đối số. Nhấp vào cũng thuận tiện sử dụng chuỗi ở đây như một phần của tài liệu dòng lệnh. Vì vậy, bạn kết thúc với chữ ký phương pháp sau:

python3 -i pythonfile.py
0

Phần chính gọi

$ vi myFile.py
9, hiện là lệnh nhấp chuột. Nó không cần phải vượt qua bất kỳ tham số nào.

Các tùy chọn cũng có thể được điền vào tự động bởi các biến môi trường, quá. Chẳng hạn, thay đổi hằng số

python3 -i pythonfile.py
9 thành tùy chọn:

python3 -i pythonfile.py
1

Cùng một trình xác nhận đường dẫn áp dụng lại. Lần này, hãy nhấp vào điền vào biến môi trường, mặc định đến giá trị của hằng số cũ nếu không có gì do môi trường cung cấp.

Nhấp có thể làm nhiều việc hơn. Nó có đầu ra bảng điều khiển màu, lời nhắc và tiểu ban cho phép bạn xây dựng các công cụ CLI phức tạp. Duyệt qua tài liệu Click cho thấy nhiều sức mạnh của nó.

Bây giờ thêm một số bài kiểm tra vào hỗn hợp.

Kiểm tra

Click có một số lời khuyên về việc chạy các bài kiểm tra từ đầu đến cuối bằng cách sử dụng CLI Runner. Bạn có thể sử dụng điều này để thực hiện một thử nghiệm hoàn chỉnh (trong dự án mẫu, các thử nghiệm nằm trong thư mục

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

3.)

Các thử nghiệm nằm trong một phương pháp của một lớp thử nghiệm. Hầu hết các quy ước đều tuân theo những gì tôi sử dụng trong bất kỳ dự án Python nào khác rất chặt chẽ, nhưng có một vài chi tiết cụ thể vì Rotoscope sử dụng

python3 -i pythonfile.py
7. Trong phương thức

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

5, tôi tạo một

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

6. Bài kiểm tra sử dụng điều này để chạy lệnh trong một hệ thống tệp bị cô lập. Sau đó, bài kiểm tra tạo ra các thư mục

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

7 và

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

8 và tệp giả

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

9 trong hệ thống tệp bị cô lập. Sau đó, nó gọi Clirunner giống như bạn sẽ gọi một ứng dụng dòng lệnh. Sau khi chạy hoàn tất, thử nghiệm kiểm tra hệ thống tập tin bị cô lập và xác minh rằng

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

7 trống và

#!/usr/bin/python

from glob import glob
from os.path import join, basename
from shutil import move
from datetime import datetime
from os import link, unlink

LATEST = 'latest.txt'
ARCHIVE = '/Users/mark/archive'
INCOMING = '/Users/mark/incoming'
TPATTERN = '%Y-%m-%d'

def transmogrify_filename(fname):
    bname = basename(fname)
    ts = datetime.now().strftime(TPATTERN)
    return '-'.join([ts, bname])

def set_current_latest(file):
    latest = join(ARCHIVE, LATEST)
    try:
        unlink(latest)
    except:
        pass
    link(file, latest)

def rotate_file(source):
    target = join(ARCHIVE, transmogrify_filename(source))
    move(source, target)
    set_current_latest(target)

def rotoscope():
    file_no = 0
    folder = join(INCOMING, '*.txt')
    print(f'Looking in {INCOMING}')
    for file in glob(folder):
        rotate_file(file)
        print(f'Rotated: {file}')
        file_no = file_no + 1
    print(f'Total files rotated: {file_no}')

if __name__ == '__main__':
    print('This is rotoscope 0.4.1. Bleep, bloop.')
    rotoscope()

8 chứa hai tệp (liên kết mới nhất và tệp được lưu trữ.)

python3 -i pythonfile.py
2

Để thực hiện các thử nghiệm này trên bảng điều khiển của tôi, hãy chạy

nano pythonfile.py

emacs pythonfile.py -nw
3 trong thư mục gốc của dự án.

Trong quá trình thực hiện các bài kiểm tra, tôi đã tìm thấy một lỗi trong mã của mình.Khi tôi thực hiện chuyển đổi nhấp chuột, rotoscope chỉ không liên kết tệp mới nhất, cho dù nó có mặt hay không.Các thử nghiệm bắt đầu với một hệ thống tệp mới (không phải thư mục nhà của tôi) và kịp thời thất bại.Tôi có thể ngăn chặn loại lỗi này bằng cách chạy trong một môi trường thử nghiệm tự động và cô lập độc đáo.Điều đó sẽ tránh được rất nhiều vấn đề "Nó hoạt động trên máy của tôi".

Giàn giáo và các mô -đun

Điều này hoàn thành tour du lịch của chúng tôi về những điều nâng cao mà bạn có thể làm với

python3 -i pythonfile.py
6 và
python3 -i pythonfile.py
7.Có nhiều khả năng để tăng cấp một kịch bản Python thông thường, và biến ngay cả các tiện ích đơn giản của bạn thành các công cụ CLI chính thức.

Hướng dẫn how do i change python code to terminal? - làm cách nào để thay đổi mã python thành thiết bị đầu cuối?
Công việc này được cấp phép theo giấy phép quốc tế Creative Commons Attribution-chia sẻ 4.0.