Bash chạy tập lệnh Python

Tôi là một fan hâm mộ lớn của "công cụ phù hợp cho công việc phù hợp". Đối với một số thứ, công cụ phù hợp là shell script. Đối với những người khác, đó là Python. Nhưng đôi khi… là cả hai

Rất nhiều lần tôi thấy mình đang viết một shell script và muốn phức tạp hơn một chút so với những gì tôi quan tâm trong shell script. Đôi khi, viết một vài dòng bằng Python dễ hơn là cố gắng tìm ra nó trong tập lệnh shell. Nhưng… đôi khi, việc không duy trì (hoặc chuyển) toàn bộ tệp Python (. py) để chứa logic này

Ad hoc Python trong tập lệnh shell

vậy, bạn có thể làm gì? . Làm thế nào bạn có thể làm điều này? . Một ví dụ

những ngày còn lai. sh

#!/bin/bash

PYCMD=$(cat <<EOF
from datetime import datetime

first_day_of_new_year = datetime(2022, 1, 1)

days_remaining = (first_day_of_new_year - datetime.now()).days
print('{} days remaining in this year'.format(days_remaining))
EOF
)

python3 -c "$PYCMD"
9

Và bây giờ vì lợi ích của sự hoàn thiện

1
2
0

thụt đầu dòng

Có một số cách để thực hiện chuỗi nhiều dòng trong tập lệnh shell và cách sử dụng tài liệu tại đây (

1
2
1) để chuyển hướng chuỗi là cách dễ hiểu nhất và dễ nhớ nhất. Vì tôi sử dụng khoảng trắng chứ không phải tab, nên tôi không thể tận dụng lợi thế của việc xóa các tab ở đầu của
1
2
2, vì vậy tôi cần cẩn thận với việc thụt lề của mình

Giả sử chúng ta có mã Python được thụt vào trong tập lệnh shell. Có thể đó là một vòng lặp hoặc một chức năng như thế này

1
2
3

Điều này có vẻ ổn, nhưng nó không đúng cú pháp

1
2
4

Đối với cả tài liệu ở đây và mã Python, chúng ta cần giữ cho mã không được thụt lề. Đây là hình thức chính xác

1
2
5

Gỡ lỗi Python bên trong tập lệnh Shell

Mã không phải lúc nào cũng hoạt động theo cách chúng ta nghĩ. Gỡ lỗi là một phần cần thiết của bất kỳ quá trình phát triển phần mềm nào và bạn cũng có thể cần gỡ lỗi mã Python trực tiếp trong tập lệnh trình bao của mình

Là một lập trình viên Python, chúng ta khá quen thuộc với việc thiết lập breakpoint trong code với

1
2
6. Vì vậy, hãy đặt điểm dừng đó trong shell script của chúng ta và xem điều gì sẽ xảy ra

1
2
7

1
2
8

Hmmm, chúng tôi có trải nghiệm gỡ lỗi một phần (vì chúng tôi đã chuyển mã đặc biệt sang Python bằng

#!/bin/bash

PYCMD=$(cat <<EOF
from datetime import datetime

first_day_of_new_year = datetime(2022, 1, 1)

days_remaining = (first_day_of_new_year - datetime.now()).days
print('{} days remaining in this year'.format(days_remaining))
EOF
)

python3 -c "$PYCMD"
8). Chúng tôi có thể phân tích mã, nhưng thật khó để biết chúng tôi đang ở đâu, đặc biệt là khi chúng tôi xem qua mã, bởi vì nó không thể hiển thị bất kỳ dòng mã nào. Thông thường, khi bạn thực hiện
#!/bin/bash

PYCMD=$(cat <<EOF
from datetime import datetime

first_day_of_new_year = datetime(2022, 1, 1)

days_remaining = (first_day_of_new_year - datetime.now()).days
print('{} days remaining in this year'.format(days_remaining))
EOF
)

python3 -c "$PYCMD"
20 trong trình gỡ lỗi, nó sẽ liệt kê dòng mã hiện tại mà trình gỡ lỗi đang bật và một số dòng mã xung quanh. Rất hữu ích và gần như cần thiết để gỡ lỗi thích hợp

Làm thế nào chúng ta có thể nhận được xung quanh này?

#!/bin/bash

PYCMD=$(cat <<EOF
from datetime import datetime

first_day_of_new_year = datetime(2022, 1, 1)

days_remaining = (first_day_of_new_year - datetime.now()).days
print('{} days remaining in this year'.format(days_remaining))
EOF
)

python3 -c "$PYCMD"
21

#!/bin/bash

PYCMD=$(cat <<EOF
from datetime import datetime

first_day_of_new_year = datetime(2022, 1, 1)

days_remaining = (first_day_of_new_year - datetime.now()).days
print('{} days remaining in this year'.format(days_remaining))
EOF
)

python3 -c "$PYCMD"
22

Tuyệt quá. Bây giờ chúng ta có thể gỡ lỗi mã Python với tất cả các tính năng và sự thoải mái của pdb

Cảnh báo và suy nghĩ cuối cùng

Nếu bạn thấy mã Python đặc biệt được nhúng của mình trở nên dài, thì có lẽ nên chuyển mã đó sang một tệp riêng biệt để mã có thể được kiểm tra và bảo trì đúng cách. Hoặc thậm chí có thể chỉ cần viết toàn bộ tiện ích bằng Python và quên cách tiếp cận shell script

Hy vọng rằng bài đăng trên blog này đã minh họa tính linh hoạt của việc nhúng mã Python trực tiếp vào tập lệnh shell của bạn để giúp trải nghiệm phát triển tốt hơn một chút so với việc phải giải quyết tất cả các vấn đề chỉ trong tập lệnh shell

Bạn có thể chạy tập lệnh Python trong Bash không?

Làm cách nào để chạy tập lệnh Python từ thiết bị đầu cuối bash? . Điều hướng thiết bị đầu cuối đến thư mục chứa tập lệnh bằng lệnh cd. Nhập python SCRIPTNAME. py trong thiết bị đầu cuối để thực thi tập lệnh .

Tôi có thể chạy tập lệnh Python trong thiết bị đầu cuối không?

Chạy tập lệnh Python từ thiết bị đầu cuối rất đơn giản, thay vì viết tập lệnh Python trong thiết bị đầu cuối, tất cả những gì bạn cần làm là sử dụng trình soạn thảo văn bản như vim, emacs hoặc notepad++ . py tiện ích mở rộng .