Bạn có thể kết nối javascript với python không?

Mọi người đều có câu trả lời của riêng mình, nhưng khi nói đến phát triển web, không gì có thể vượt qua JavaScript. Nhưng đôi khi chúng ta phải làm những công việc đòi hỏi khắt khe hơn, chẳng hạn như phân tích một lượng lớn dữ liệu. Trong trường hợp này, Python có thể là lựa chọn tốt hơn. Nhưng đây chỉ là một chức năng của trang web của chúng tôi và đương nhiên, chúng tôi sẽ không phát triển toàn bộ dự án bằng Python vì yêu cầu này

Hôm nay, tôi sẽ giới thiệu cho các bạn một phương pháp có thể kết hợp hoàn hảo giữa JavaScript và Python để giải quyết các bài toán kỹ thuật một cách hiệu quả

Python + JavaScript = Tuyệt vời

Chúng ta có thể sử dụng quy trình con trong Node. js để chạy tập lệnh Python khi cần

const result = require('subprocess').result,
app.get("process_data", (req, res) => {
result('python3', ['demo.py'])
})

Viết một tập lệnh Python khác

# demo.py
doSometing()

Ngoài cách này, chúng ta cũng có thể truyền dữ liệu vào tập lệnh Python của mình

const result = require('subprocess').result,
app.get("process_data", (req, res) => {
const msg = "Hello World"
result('python3', ['demo.py', msg])
})

Trong Python, để có thể đọc dữ liệu, chúng ta phải nhập mô-đun sys

import sys, json

def main():
msg = sys.argv[1]
doSometing(msg)

if __name__ == '__main__':
main()

Bây giờ, thay vì truyền dữ liệu khi sinh ra một quy trình Python, chúng tôi gửi dữ liệu trong quy trình công việc

const result = require('subprocess').result,
const py = result('python3', ['demo.py'])
const data = {
msg: "Hello World"
}
py.stdin.write(JSON.stringify(data)) //we have to send data as a string, so we are using JSON.stringify
py.stdin.end()

Sửa đổi tập lệnh Python

import sys, json

def main():
lines = sys.stdin.readlines()
data = json.loads(lines)
doSometing(data['msg'])

if __name__ == '__main__':
main()

Cuối cùng, chúng ta có thể gửi phản hồi tới Node. js từ tập lệnh Python

const result = require('subprocess').result,
const py = result('python3', ['demo.py'])

py.stdout.on('data', function(res){
let data = JSON.parse(res.toString())
console.log(data)
})

Mã Python là

import sys

# You will have your own implementation of get data.In this case lets assume it returns a dict/json.
res = getData()
print(json.dumps(data))

sys.stdout.flush()

Bằng cách này, chúng ta có thể tính đến các lợi thế của JavaScript và Python trong quá trình phát triển web và tối đa hóa giá trị của các ngôn ngữ lập trình khác nhau. Bạn có thể kết hợp JavaScript và Python mà không cần sử dụng cơ sở dữ liệu hoặc phát triển cấu trúc API rườm rà để nâng cao hiệu quả phát triển

Cảm ơn bạn đã đọc

Thêm nội dung tại PlainEnglish. io. Đăng ký nhận bản tin hàng tuần miễn phí của chúng tôi. Theo dõi chúng tôi trên Twitter và LinkedIn. Kiểm tra Sự bất hòa trong cộng đồng của chúng tôi và tham gia Tập thể tài năng của chúng tôi

Có kinh nghiệm về JavaScript và Python, tôi muốn tìm cách sử dụng cả hai và nhận được lợi ích từ môi trường phát triển phong phú của chúng. Vì vậy, tôi đã tìm kiếm nhiều ứng cử viên và thấy python-bridge hữu ích

Trong bài đăng này, chúng tôi sẽ tìm hiểu cách sử dụng nó với JavaScript async đang chờ. Bạn sẽ thấy thật dễ dàng nếu bạn đã viết mã cho cả hai ngôn ngữ

Điều kiện tiên quyết

  1. cầu trăn
  2. Lập trình không đồng bộ JavaScript
  3. Cách sử dụng píp
  4. Cách sử dụng NPN

Tôi cho rằng bạn đã biết cách xử lý các gói trong Python và JavaScript

Bạn nên đọc kho lưu trữ cầu nối python và làm theo các ví dụ trước khi đọc bài đăng này

Bài viết về lập trình JavaScript async sẽ giúp bạn hiểu rất nhiều về cách sử dụng nó

Nếu bạn chỉ muốn xem toàn bộ mã trước, bạn có thể tìm thấy kết quả cuối cùng của bài đăng này tại Kho lưu trữ pyscript

Mục lục

  1. Cách thức hoạt động của python-bridge
  2. Cách cải thiện ví dụ với async đang chờ
  3. Cách sử dụng các gói Python trong JavaScript
  4. So sánh gói JavaScript tương đương với gói Python
  5. Phần kết luận

1. Cách thức hoạt động của python-bridge

Tôi hy vọng bạn đã đầu tư thời gian của mình để đọc tài liệu về python-bridge

Ví dụ chính cho điều đó là

________số 8

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Nếu bạn chưa cài đặt gói python-bridge trước với các gói này và tạo một tệp có đoạn mã bên dưới

$yarn add python-bridge $touch py.js

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Nếu chơi một thời gian với const result = require('subprocess').result,
app.get("process_data", (req, res) => {
const msg = "Hello World"
result('python3', ['demo.py', msg])
})
7, bạn sẽ thấy API chính của nó là const result = require('subprocess').result,
app.get("process_data", (req, res) => {
const msg = "Hello World"
result('python3', ['demo.py', msg])
})
8 và $yarn add python-bridge $touch py.js 0

# demo.py
doSometing()
1

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

như chúng đã được sử dụng ở trên

Bạn có thể thấy rằng nó sử dụng JavaScript Promise để sử dụng giá trị trả về từ Python (ví dụ x)

Nếu bạn đã cài đặt cả Node và Python trong máy của mình và đã kiểm tra nó, bạn sẽ thấy nó hoạt động bình thường

Cũng cần lưu ý rằng chúng ta nên sử dụng cú pháp $yarn add python-bridge $touch py.js 1 để chuyển biến từ JavaScript sang Python

Điều đó là hợp lý vì chúng tôi đang sử dụng Python trong JavaScript và gọi dữ liệu từ Máy ảo Python đến Nút

Điều này đã là tuyệt vời. Bạn có thể sử dụng Python và các mô-đun của nó bên trong JavaScript với Promise API

Bạn có thể kiểm tra nó với các mô-đun python yêu thích của mình như Numpy, Pandas, pyautogui, v.v. tại thời điểm này hoặc các mô-đun tích hợp khác nếu bạn muốn

Để làm điều đó, bạn phải sử dụng $yarn add python-bridge $touch py.js 2 và $yarn add python-bridge $touch py.js 3 để kích hoạt env ảo đó và cài đặt các phụ thuộc mà bạn muốn kiểm tra trước và phải ở cùng thư mục chứa gói của bạn. json được định vị

2. Cách cải thiện ví dụ với async đang chờ

Bạn có thể đã thấy nó hữu ích rồi. Tuy nhiên, không dễ dàng chỉ sử dụng Promise để lưu và sử dụng nhiều dữ liệu khác nhau được tính toán từ mã Python và các mô-đun như Numpy và Pandas

Sẽ tốt hơn nếu chúng ta tìm cách dễ dàng lưu dữ liệu từ Python dưới dạng biến và sử dụng chúng bên trong JavaScript bất cứ khi nào chúng ta muốn

Đã đến lúc sử dụng cú pháp JavaScript $yarn add python-bridge $touch py.js 4 như ví dụ bên dưới

# demo.py
doSometing()
6

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bạn có thể thấy rằng ví dụ từ đoạn mã trước trở nên dễ đọc hơn với async đang chờ

Chúng tôi cũng có thể tách từng giá trị khỏi Python và lưu nó dưới dạng các biến riêng biệt

Bạn có thể kiểm tra nó với $node py. js và hy vọng nó sẽ hoạt động tốt

Tôi nghĩ rằng bạn không cần giải thích về cách async await hoạt động ở đây. Tôi hy vọng bạn đã đọc một trong đó giải thích nó tốt nhất

Với ví dụ trên, bạn chỉ cần đợi từ khóa bất cứ khi nào bạn muốn lưu dữ liệu từ Python dưới dạng biến. Sử dụng chúng bất cứ khi nào bạn muốn sau này

Với async trước tên hàm và chờ giá trị từ Máy ảo Python Chúng tôi có thể dễ dàng chuyển dữ liệu giữa Python và JavaScirpt và sử dụng cả hai trong cùng một. js với cầu nối python

Gần đây, tôi phải tìm giá trị hex cho BigNumber để kiểm tra mã thông báo ERC20 và so sánh nó bên trong tệp thử nghiệm với JavaScript và không dễ để tìm thấy giá trị đó

Vì vậy, tôi nghĩ sẽ hữu ích khi sử dụng những gì được sử dụng cho bài đăng này. Nếu bạn có phần nào có thể được thực hiện dễ dàng hơn bằng Python so với JavaScript, sẽ tốt hơn nếu điều chỉnh mã được sử dụng ở đây

# demo.py
doSometing()
7

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Bạn có thể so sánh để sử dụng const result = require('subprocess').result,
app.get("process_data", (req, res) => {
const msg = "Hello World"
result('python3', ['demo.py', msg])
})
7 hoặc kiểm tra thủ công trên bảng điều khiển Python của mình tương tự như mã bên dưới hoặc sử dụng trang web nếu bạn có thể tìm thấy

Với code dùng cho bài viết này, bạn sẽ có thêm một lựa chọn khi đã sử dụng JavaScript và đã quen với Python rồi. Sau đó, bạn sẽ có thể tiết kiệm thời gian của mình nếu bạn có thể tìm thấy những cơ hội thích hợp để sử dụng nó.

# demo.py
doSometing()
8

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

3. Cách sử dụng các gói Python trong JavaScript

Trong phần trước, chúng ta đã học cách sử dụng async đang chờ để làm cho ví dụ từ trang web trở nên hữu ích hơn. Tuy nhiên, bạn cũng có thể sử dụng chúng với một số gói nổi tiếng và làm cho ví dụ này trở nên hữu ích

Vì vậy, chúng tôi sẽ bao gồm một số gói Python nổi tiếng trong phần này

Numpy, Pandas và pyautogui được sử dụng làm ví dụ vì tôi nghĩ Python mạnh về thao tác và tự động hóa dữ liệu và chúng là gói Python chính cho điều đó

Hãy để tôi chỉ cho bạn mã đầu tiên. Để sử dụng chúng, trước tiên bạn phải cài đặt chúng và phải ở đúng vị trí để sử dụng kiểm tra điều này trong khi venv được kích hoạt chính xác cho các gói Python

Cập nhật py của bạn. js và $yarn add python-bridge $touch py.js 6 để kiểm tra xem nó có hoạt động không

const result = require('subprocess').result,
app.get("process_data", (req, res) => {
const msg = "Hello World"
result('python3', ['demo.py', msg])
})
0

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Trong khi chơi với gói này, tôi thấy rằng mọi thứ sẽ không hoạt động tốt một cách kỳ diệu với sự trợ giúp từ tác giả gói

Chúng ta nên đầu tư thời gian để tìm cách sử dụng chúng cho dự án của riêng mình

1. Chúng tôi xác định một số hàm để bọc giá trị trả về từ Python bên trong "" bằng API JSON hoặc chuyển đổi nó thành giá trị kiểu chuỗi trước khi chúng vào môi trường phát triển JavaScript. Những gì bạn cần chủ yếu sẽ chỉ là $yarn add python-bridge $touch py.js 7. (Bạn có thể sử dụng toString() trong JavaScript hoặc str() hoặc các phương thức chuyển đổi loại khác do Python cung cấp bất cứ khi nào bạn gặp sự cố liên quan đến loại. )

2. Chúng tôi kiểm tra Numpy và Pandas có thực sự hoạt động hay không. Bạn có thể thấy rằng chúng hoạt động và thấy rằng bạn chỉ cần sử dụng $yarn add python-bridge $touch py.js 8 khi bạn cần trả về giá trị từ Python sang JavaScript. Nếu không, bạn sẽ chủ yếu sử dụng $yarn add python-bridge $touch py.js 9

3. Bạn có thể thấy rằng bạn có thể sử dụng giá trị từ Python và sử dụng chúng một cách tự do bên trong JavaScript

4. Chúng tôi sử dụng pyautogui để lấy vị trí hiện tại của con trỏ chuột của bạn. Tôi không thể tìm thấy nó tương đương trong các gói JavaScript. Bạn có thể thấy rằng bạn có thể sử dụng các gói Python thay thế khi không có mô-đun JavaScript

  1. Chúng tôi kiểm tra các API khác nhau của pyautogui tại đây. Tôi muốn bạn kiểm tra nó trong máy của riêng bạn. Bạn sẽ thấy chuột, bàn phím và ảnh chụp màn hình đều hoạt động tốt. Bạn cũng có thể sử dụng $yarn add python-bridge $touch py.js 8 trong một số trường hợp khi bạn cũng có thể sử dụng $yarn add python-bridge $touch py.js 9

Các gói và tên được sử dụng ở đây không quan trọng và đến lượt bạn tìm cách tận dụng tốt nhất chúng

4. So sánh gói JavaScript tương đương với gói Python

Mã được sử dụng ở đây chỉ dành cho nguyên mẫu. Bạn sẽ có thể tìm ra cách tốt hơn để so sánh tốc độ nếu bạn sẵn sàng đầu tư thời gian cho

Vì vậy, bạn có thể thấy nó hữu ích hơn tôi với ví dụ trước nếu bạn sử dụng Python nhiều

Nhưng bạn có thể thắc mắc rằng có đáng để sử dụng Python bên trong JavaScript khi bạn xem xét hiệu suất và có các Mô-đun JavaScript tương tự

Vì vậy, chúng tôi sẽ so sánh ngắn gọn Numpy và Numjs vì chúng phục vụ cho cùng một mục đích và có API rất giống nhau

Bạn có thể lưu đoạn mã dưới đây và kiểm tra nó với const result = require('subprocess').result,
app.get("process_data", (req, res) => {
const msg = "Hello World"
result('python3', ['demo.py', msg])
})
7

const result = require('subprocess').result,
app.get("process_data", (req, res) => {
const msg = "Hello World"
result('python3', ['demo.py', msg])
})
6

Vào chế độ toàn màn hình Thoát chế độ toàn màn hình

Với cách triển khai đơn giản này để so sánh tốc độ, Bạn sẽ thấy rằng có thể tốt hơn nếu sử dụng các gói JavaScript thay vì các gói Python khi đã có các lựa chọn thay thế cho chúng

Điều này không có nghĩa là gói JavaScript sẽ nhanh hơn Python và ngược lại bởi vì với cách sử dụng gói Python này, bạn cũng nên đợi giá trị trả về của Python không đồng bộ với mã Node của bạn

Vì mục đích chính của bài viết không phải là kiểm tra và so sánh tốc độ, tôi sẽ không tìm thấy các ví dụ kiểm tra hoạt động chi tiết. Nếu bạn muốn, bạn có thể làm cho nó tốt hơn

5. Phần kết luận

Tôi hy vọng bài đăng này sẽ hữu ích cho những người muốn sử dụng và viết mã cho Python và JavaScript trong cùng một tệp

Đó cũng là một thử nghiệm để tôi quen thuộc hơn với mã Python

Nếu bạn thích bài viết, xin vui lòng chia sẻ nó với những người khác. Nhiều bài viết đang đến Theo dõi tôi tại đây. Tôi dự định chia sẻ thêm blockchain và những thứ khác. Tôi quan tâm đến ETH và POLKADOT

Chủ đề