Làm cách nào để giao tiếp với python và php?
Có, nó sẽ hoạt động và mức độ rủi ro của nó phụ thuộc vào mức độ triển khai của bạn tốt như thế nào. Điều này là hoàn toàn chấp nhận được nếu được thực hiện một cách chính xác. Tôi đã tích hợp thành công PHP và C, khi PHP đơn giản là quá chậm để thực hiện một số tác vụ thích hợp nhất định trong thời gian thực (IIRC, PHP chậm hơn 7 lần so với đối tác C của nó) Show Cách triển khai tốt nhất là bỏ qua thực tế chúng là PHP/Python cụ thể và chỉ coi chúng là hai ngôn ngữ riêng biệt Bây giờ, bạn cần chọn một số cách tương tác 'chuẩn'. HTTP có lẽ là dễ nhất. mọi người đều đã thiết lập máy chủ web nên việc đặt tập lệnh trực tuyến chỉ là vấn đề Từ đây, bạn cần tránh xa sự thật rằng chúng vẫn là PHP/Python và thiết kế API của bạn mà không biết rằng. Ví dụ, hãy tưởng tượng bạn có một máy tính
Sau đó, API của bạn sẽ là os.system('command_1 < input_file | command_2 > output_file')9. Điều này là hoàn toàn chấp nhận được. người dùng API mong đợi câu trả lời trong thẻ >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'0 (ví dụ của tôi là XML của một người lười biếng, hoàn toàn là một minh chứng, nhưng tôi nghĩ bạn nên xem xét việc xuất JSON). Đây không phải là
Vì API của bạn sẽ là >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'1. Mặc dù nó sẽ dẫn đến cùng một câu trả lời (và bỏ qua bất kỳ lỗi bảo mật lớn nào), người gọi cần biết chi tiết triển khai của PHP ( >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'2 là một hàm PHP sẽ chỉ đánh giá đầu vào của nó là mã PHP thực). Nếu họ đã làm >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'3, thì đó là >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'4 hay >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'5 (2 mũ 3). Đây là một thiết kế tồi. thông tin đầu vào của bạn phải độc lập với ngôn ngữ mà API của bạn được triển khai. Ngoài ra, làm cách nào để phân biệt giữa thông báo lỗi và câu trả lời? Phía Python - bạn chỉ cần đảm bảo rằng các yêu cầu HTTP không thành công. Nếu bạn không thể kết nối với tập lệnh của mình, có thể thử lại và nếu không thành công, hãy bỏ qua một thông báo lỗi thú vị yêu cầu họ thử lại sau. Đừng chỉ hiển thị cho họ dấu vết ngăn xếp Python Bạn cũng nên ghi lại API của mình càng nhiều càng tốt - điều này sẽ giúp bạn tiết kiệm rất nhiều thời gian. Nói mỗi đầu vào nên là gì, chúng nên nằm trong phạm vi nào và đưa ra một số ví dụ hay về cách sử dụng nó Phía API - bạn cũng nên cố gắng nhanh chóng thất bại nếu có gì đó không ổn. Nếu một biến bị thiếu, không đầy đủ hoặc không hợp lệ, hãy in một thông báo và thoát ra là điều đầu tiên bạn làm. Không chỉ chạy với các giá trị và sau đó để họ nhận lại thông báo lỗi PHP (hãy nhớ rằng họ không nên biết hoặc quan tâm API của bạn được triển khai bằng ngôn ngữ nào), mà nên nhận được một >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'6 thân thiện Một chương trình đang chạy được gọi là một tiến trình. Mỗi quy trình có trạng thái hệ thống riêng, bao gồm bộ nhớ, danh sách các tệp đang mở, bộ đếm chương trình theo dõi lệnh đang được thực thi và ngăn xếp cuộc gọi được sử dụng để giữ các biến cục bộ của hàm Thông thường, một quy trình thực hiện lần lượt các câu lệnh trong một chuỗi duy nhất của luồng điều khiển, đôi khi được gọi là luồng chính của quy trình. Tại bất kỳ thời điểm nào, chương trình chỉ làm một việc Một chương trình có thể tạo các quy trình mới bằng cách sử dụng các chức năng thư viện, chẳng hạn như các chức năng được tìm thấy trong os hoặc các mô-đun quy trình con, chẳng hạn như os. fork(), quy trình con. Popen(), v.v. Tuy nhiên, các quy trình này, được gọi là quy trình con, chạy dưới dạng các thực thể hoàn toàn độc lập - mỗi thực thể có trạng thái hệ thống riêng và luồng thực thi chính của chúng Bởi vì một quy trình con là độc lập, nó thực thi đồng thời với quy trình ban đầu. Nghĩa là, quy trình tạo ra quy trình con có thể tiếp tục làm việc với những thứ khác trong khi quy trình con thực hiện công việc của chính nó ở hậu trường Mô-đun quy trình con cho phép chúng tôi
Nó cung cấp giao diện cấp cao hơn một số mô-đun có sẵn khác và nhằm thay thế các chức năng sau
Chúng tôi không thể sử dụng các lệnh UNIX trong tập lệnh Python của mình như thể chúng là mã Python. Ví dụ: tên echo gây ra lỗi cú pháp vì echo không phải là câu lệnh hoặc hàm tích hợp trong Python. Vì vậy, trong tập lệnh Python, chúng tôi đang sử dụng tên in thay thế Để chạy các lệnh UNIX, chúng ta cần tạo một quy trình con chạy lệnh. Cách tiếp cận được đề xuất để gọi các quy trình con là sử dụng các chức năng tiện lợi cho tất cả các trường hợp sử dụng mà chúng có thể xử lý. Hoặc chúng ta có thể sử dụng giao diện Popen cơ bản có thể được sử dụng trực tiếp Cách đơn giản nhất để chạy lệnh UNIX là sử dụng os. hệ thống() >>> import os >>> os.system('echo $HOME') /user/khong 0 >>> # or we can use >>> os.system('echo %s' %'$HOME') /user/khong 0 Đúng như dự đoán, chúng tôi đã nhận được $HOME dưới dạng thiết bị xuất chuẩn (đến thiết bị đầu cuối). Ngoài ra, chúng tôi nhận được giá trị trả về là 0, đây là kết quả của việc thực thi lệnh này, điều đó có nghĩa là không có lỗi trong quá trình thực thi hệ điều hành. system('command with args') chuyển lệnh và đối số tới trình bao hệ thống của chúng tôi. Bằng cách sử dụng này thực sự có thể chạy nhiều lệnh cùng một lúc và thiết lập đường ống và chuyển hướng đầu vào/đầu ra. os.system('command_1 < input_file | command_2 > output_file') Nếu chúng tôi chạy mã ở trên os. system('echo $HOME') trong Python IDLE, chúng tôi chỉ thấy 0 vì thiết bị xuất chuẩn có nghĩa là thiết bị đầu cuối. Để xem đầu ra lệnh, chúng ta nên chuyển hướng nó đến một tệp và đọc từ đó >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n' Mở một đường dẫn đến hoặc từ lệnh. Giá trị trả về là một đối tượng tệp mở được kết nối với đường ống, có thể được đọc hoặc ghi tùy thuộc vào chế độ là 'r' (mặc định) hay 'w'. Đối số bufsize có cùng ý nghĩa với đối số tương ứng với hàm open() tích hợp. Trạng thái thoát của lệnh (được mã hóa theo định dạng được chỉ định cho wait()) có sẵn dưới dạng giá trị trả về của phương thức close() của đối tượng tệp, ngoại trừ khi trạng thái thoát bằng 0 (chấm dứt không có lỗi), Không có là >>> import os >>> stream = os.popen('echo $HOME') >>> stream.read() '/user/khong\n' hệ điều hành. popen() làm điều tương tự như os. hệ thống ngoại trừ việc nó cung cấp cho chúng tôi một đối tượng luồng giống như tệp mà chúng tôi có thể sử dụng để truy cập đầu vào/đầu ra tiêu chuẩn cho quy trình đó. Có 3 biến thể khác của popen, tất cả đều xử lý i/o hơi khác nhau Nếu chúng ta chuyển mọi thứ dưới dạng một chuỗi, thì lệnh của chúng ta sẽ được chuyển đến trình bao; Tuy nhiên, nó không được dùng nữa kể từ phiên bản 2. 6. Chức năng này đã lỗi thời. Sử dụng mô-đun quy trình con. tài liệu. con trăn. tổ chức Về cơ bản, nó giống như lớp Popen và nhận tất cả các đối số giống nhau, nhưng nó chỉ đợi cho đến khi lệnh hoàn thành và cung cấp cho chúng tôi mã trả về subprocess.call(args, *, stdin=None, stdout=None, stderr=None, shell=False) Chạy lệnh được mô tả bởi args. Đợi lệnh hoàn thành, sau đó trả về thuộc tính returncode >>> import os >>> os.chdir('/') >>> import subprocess >>> subprocess.call(['ls','-l']) total 181 drwxr-xr-x 2 root root 4096 Mar 3 2012 bin drwxr-xr-x 4 root root 1024 Oct 26 2012 boot ... Các đối số dòng lệnh được truyền dưới dạng một danh sách các chuỗi, giúp tránh phải thoát dấu ngoặc kép hoặc các ký tự đặc biệt khác mà trình bao có thể hiểu được ________số 8Đặt đối số trình bao thành giá trị thực khiến quy trình con sinh ra quy trình trình bao trung gian và yêu cầu nó chạy lệnh. Nói cách khác, sử dụng trình bao trung gian có nghĩa là các biến, mẫu hình cầu và các tính năng trình bao đặc biệt khác trong chuỗi lệnh được xử lý trước khi lệnh được chạy. Ở đây, trong ví dụ, $HOME đã được xử lý trước lệnh echo. Thực ra đây là trường hợp lệnh mở rộng shell còn lệnh ls -l được coi là lệnh đơn giản Đây là mã mẫu (PyGoogle/FFMpeg/iframe_extract. py). Nó tải xuống video YouTube và sau đó trích xuất các khung hình I vào thư mục con ''' iframe_extract.py - download video and ffmpeg i-frame extraction Usage: (ex) python iframe_extract.py -u https://www.youtube.com/watch?v=dP15zlyra3c This code does two things: 1. Download using youtube-dl cmd = ['youtube-dl', '-f', videoSize, '-k', '-o', video_out, download_url] 2. Extract i-frames via ffmpeg cmd = [ffmpeg,'-i', inFile,'-f', 'image2','-vf', "select='eq(pict_type,PICT_TYPE_I)'",'-vsync','vfr', imgFilenames] ''' from __future__ import unicode_literals import youtube_dl import sys import os import subprocess import argparse import glob if sys.platform == "Windows": FFMPEG_BIN = "ffmpeg.exe" MOVE = "move" MKDIR = "mkdir" else: FFMPEG_BIN = "ffmpeg" MOVE = "mv" MKDIR = "md" def iframe_extract(inFile): # ffmpeg -i inFile -f image2 -vf \ # "select='eq(pict_type,PICT_TYPE_I)'" -vsync vfr oString%03d.png # infile : video file name # (ex) 'FoxSnowDive-Yellowstone-BBCTwo.mp4' imgPrefix = inFile.split('.')[0] # imgPrefix : image file # start extracting i-frames home = os.path.expanduser("~") ffmpeg = home + '/bin/ffmpeg' imgFilenames = imgPrefix + '%03d.png' cmd = [ffmpeg,'-i', inFile,'-f', 'image2','-vf', "select='eq(pict_type,PICT_TYPE_I)'",'-vsync','vfr', imgFilenames] # create iframes print "creating iframes ...." subprocess.call(cmd) # Move the extracted iframes to a subfolder # imgPrefix is used as a subfolder name that stores iframe images cmd = 'mkdir -p ' + imgPrefix os.system(cmd) print "make subdirectoy", cmd mvcmd = 'mv ' + imgPrefix + '*.png ' + imgPrefix print "moving images to subdirectoy", mvcmd os.system(mvcmd) def get_info_and_download(download_url): # Get video meta info and then download using youtube-dl ydl_opts = {} # get meta info from the video with youtube_dl.YoutubeDL(ydl_opts) as ydl: meta = ydl.extract_info(download_url, download=False) # renaming the file # remove special characters from the file name print('meta[title]=%s' %meta['title']) out = ''.join(c for c in meta['title'] if c.isalnum() or c =='-' or c =='_' ) print('out=%s' %out) extension = meta['ext'] video_out = out + '.' + extension print('video_out=%s' %video_out) videoSize = 'bestvideo[height<=540]+bestaudio/best[height<=540]' cmd = ['youtube-dl', '-f', videoSize, '-k', '-o', video_out, download_url] print('cmd=%s' %cmd) # download the video subprocess.call(cmd) # Sometimes output file has format code in name such as 'out.f248.webm' # so, in this case, we want to rename it 'out.webm' found = False extension_list = ['mkv', 'mp4', 'webm'] for e in extension_list: glob_str = '*.' + e for f in glob.glob(glob_str): if out in f: if os.path.isfile(f): video_out = f found = True break if found: break # call iframe-extraction : ffmpeg print('before iframe_extract() video_out=%s' %video_out) iframe_extract(video_out) return meta def check_arg(args=None): # Command line options # Currently, only the url option is used parser = argparse.ArgumentParser(description='download video') parser.add_argument('-u', '--url', help='download url', required='True') parser.add_argument('-i', '--infile', help='input to iframe extract') parser.add_argument('-o', '--outfile', help='output name for iframe image') results = parser.parse_args(args) return (results.url, results.infile, results.outfile) # Usage sample: # syntax: python iframe_extract.py -u url # (ex) python iframe_extract.py -u https://www.youtube.com/watch?v=dP15zlyra3c if __name__ == '__main__': u,i,o = check_arg(sys.argv[1:]) meta = get_info_and_download(u) Trình duyệt của bạn không hỗ trợ thẻ video 0Hàm check_call() hoạt động giống như hàm call() ngoại trừ mã thoát được kiểm tra và nếu nó báo lỗi xảy ra thì ngoại lệ CalledProcessError sẽ xuất hiện 1quy trình con. check_output() os.system('command_1 < input_file | command_2 > output_file')0 Các kênh đầu vào và đầu ra tiêu chuẩn cho quá trình bắt đầu bằng lệnh gọi() được liên kết với đầu vào và đầu ra của cha mẹ. Điều đó có nghĩa là chương trình gọi không thể nắm bắt đầu ra của lệnh. Để nắm bắt đầu ra, chúng ta có thể sử dụng check_output() để xử lý sau os.system('command_1 < input_file | command_2 > output_file')1 Chức năng này đã được thêm vào trong Python 2. 7 Việc tạo và quản lý quy trình cơ bản trong mô-đun này được xử lý bởi lớp Popen. Nó cung cấp rất nhiều tính linh hoạt để các nhà phát triển có thể xử lý các trường hợp ít phổ biến hơn không có trong các chức năng tiện lợi quy trình con. Popen() thực thi một chương trình con trong một tiến trình mới. Trên Unix, lớp sử dụng os. hành vi giống như execvp() để thực thi chương trình con. Trên Windows, lớp sử dụng hàm Windows CreateProcess() args của quy trình con. Giáo hoàng () os.system('command_1 < input_file | command_2 > output_file')2
hệ điều hành. giáo hoàng vs. quy trình con. Giáo hoàng () Điều này được dự định là một sự thay thế cho hệ điều hành. popen, nhưng nó phức tạp hơn. Ví dụ, chúng tôi sử dụng os.system('command_1 < input_file | command_2 > output_file')4thay vì os.system('command_1 < input_file | command_2 > output_file')5 Nhưng nó toàn diện và có tất cả các tùy chọn trong một lớp thống nhất thay vì các hệ điều hành khác nhau. chức năng popen quy trình con. Popen() - thiết bị xuất chuẩn và thiết bị xuất chuẩn os.system('command_1 < input_file | command_2 > output_file')6 Lưu ý rằng phương thức giao tiếp() trả về một bộ dữ liệu (stdoutdata, stderrdata). ('"Chào thế giới. "\n' ,Không có). Nếu chúng tôi không bao gồm stdout=sub process. PIPE hoặc stderr=quy trình con. PIPE trong cuộc gọi Popen, chúng tôi sẽ chỉ lấy lại Không os.system('command_1 < input_file | command_2 > output_file')7Giáo hoàng. giao tiếp () tương tác với quá trình. Gửi dữ liệu đến stdin. Đọc dữ liệu từ thiết bị xuất chuẩn và thiết bị xuất chuẩn, cho đến khi đạt đến cuối tệp. Đợi quá trình kết thúc. Đối số đầu vào tùy chọn phải là một chuỗi được gửi đến tiến trình con hoặc Không, nếu không có dữ liệu nào được gửi đến tiến trình con Vì vậy, trên thực tế, chúng ta có thể đã làm như dưới đây os.system('command_1 < input_file | command_2 > output_file')8 hoặc chúng tôi có thể chỉ định rõ ràng cái nào chúng tôi muốn từ proc. giao tiếp() os.system('command_1 < input_file | command_2 > output_file')9 Mã đơn giản nhất cho ví dụ trên có thể đang gửi luồng trực tiếp tới bảng điều khiển >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'0 Đoạn mã dưới đây là để kiểm tra hành vi thiết bị xuất chuẩn và thiết bị xuất chuẩn >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'1 Nếu chúng ta chạy nó >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'2 Lưu ý rằng thông báo tới thiết bị xuất chuẩn được hiển thị khi nó được tạo nhưng thông báo tới thiết bị xuất chuẩn được đọc qua đường ống. Điều này là do chúng tôi chỉ thiết lập một đường ống dẫn đến thiết bị xuất chuẩn Sau đó, hãy làm cho cả thiết bị xuất chuẩn và thiết bị xuất chuẩn được truy cập từ Python >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'3 Phương thức giao tiếp () chỉ đọc dữ liệu từ thiết bị xuất chuẩn và thiết bị xuất chuẩn, cho đến khi đạt đến cuối tệp. Vì vậy, sau khi tất cả các tin nhắn đã được in, nếu chúng ta gọi lại giao tiếp(), chúng ta sẽ gặp lỗi >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'4 Nếu chúng tôi muốn các thông báo đến stderr được chuyển đến stderr, chúng tôi sẽ thực hiện. stderr=tiến trình con. STDOUT >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'5 Như chúng ta thấy từ đầu ra, chúng ta không có thiết bị lỗi chuẩn vì nó đã được chuyển hướng đến thiết bị lỗi chuẩn quy trình con. Popen () - tiêu chuẩn Ghi vào một quy trình có thể được thực hiện theo cách rất giống nhau. Nếu chúng ta muốn gửi dữ liệu đến stdin của process, chúng ta cần tạo đối tượng Popen với stdin=sub process. ĐƯỜNG ỐNG Để kiểm tra, hãy viết một chương trình khác (write_to_stdin. py) chỉ cần in Đã nhận. và sau đó lặp lại tin nhắn chúng tôi gửi >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'6 Để gửi tin nhắn đến stdin, chúng ta chuyển chuỗi mà chúng ta muốn gửi làm đối số đầu vào cho giao tiếp() >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'7 Lưu ý rằng thông báo được tạo trong write_to_stdin. quá trình py được in ra thiết bị xuất chuẩn và sau đó giá trị trả về (Không, Không) được in. Đó là bởi vì không có đường ống nào được thiết lập thành thiết bị xuất chuẩn hoặc thiết bị xuất chuẩn Đây là một đầu ra khác sau khi chúng tôi chỉ định stdout=sub process. PIPE và stderr=quy trình con. PIPE như trước đây để thiết lập đường ống >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'8 quy trình con. Popen() - đường ống vỏ >>> import os >>> os.system('echo $HOME > outfile') 0 >>> f = open('outfile','r') >>> f.read() '/user/khong\n'9 các p1. tiêu chuẩn. close() sau khi bắt đầu p2 là điều quan trọng để p1 nhận được SIGPIPE nếu p2 thoát trước p1 Đây là một ví dụ khác cho một lệnh đường ống. Mã lấy ID cửa sổ cho cửa sổ hiện đang hoạt động. Lệnh trông như thế này >>> import os >>> stream = os.popen('echo $HOME') >>> stream.read() '/user/khong\n'0 Mã Python >>> import os >>> stream = os.popen('echo $HOME') >>> stream.read() '/user/khong\n'1 đầu ra >>> import os >>> stream = os.popen('echo $HOME') >>> stream.read() '/user/khong\n'2 quy trình con. Popen() - shell=True Tránh shell=True bằng mọi cách shell=True có nghĩa là thực thi mã thông qua trình bao. Nói cách khác, thực thi các chương trình thông qua trình bao có nghĩa là tất cả đầu vào của người dùng được chuyển đến chương trình được diễn giải theo cú pháp và quy tắc ngữ nghĩa của trình bao được gọi. Tốt nhất, điều này chỉ gây bất tiện cho người dùng, vì người dùng phải tuân theo các quy tắc này. Chẳng hạn, các đường dẫn chứa các ký tự shell đặc biệt như dấu ngoặc kép hoặc khoảng trống phải được thoát. Tệ nhất, nó gây rò rỉ bảo mật, vì người dùng có thể thực thi các chương trình tùy ý shell=True đôi khi thuận tiện để sử dụng các tính năng shell cụ thể như tách từ hoặc mở rộng tham số. Tuy nhiên, nếu một tính năng như vậy được yêu cầu, hãy sử dụng các mô-đun khác được cung cấp cho bạn (e. g. hệ điều hành. đường dẫn. expandvars() để mở rộng tham số hoặc shlex để tách từ). Điều này có nghĩa là nhiều công việc hơn, nhưng tránh được các vấn đề khác. - từ Ý nghĩa thực tế của 'shell=True' trong quy trình con Nếu args là một chuỗi, thì chuỗi đó chỉ định lệnh thực thi thông qua trình bao. Điều này có nghĩa là chuỗi phải được định dạng chính xác như khi nhập vào dấu nhắc trình bao. Điều này bao gồm, ví dụ, trích dẫn hoặc dấu gạch chéo ngược tên tệp thoát với dấu cách trong đó >>> import os >>> stream = os.popen('echo $HOME') >>> stream.read() '/user/khong\n'3 Chuỗi được định dạng chính xác như nó sẽ được nhập tại dấu nhắc trình bao >>> import os >>> stream = os.popen('echo $HOME') >>> stream.read() '/user/khong\n'4 Vì vậy, những điều sau đây sẽ không hoạt động >>> import os >>> stream = os.popen('echo $HOME') >>> stream.read() '/user/khong\n'5 Làm theo cũng không được >>> import os >>> stream = os.popen('echo $HOME') >>> stream.read() '/user/khong\n'6 Đó là bởi vì chúng ta vẫn chuyển nó dưới dạng một chuỗi, Python giả sử toàn bộ chuỗi là tên của chương trình sẽ thực thi và không có chương trình nào gọi là echo "Xin chào thế giới. " vậy là thất bại. Thay vào đó, chúng ta phải chuyển từng đối số riêng biệt Tôi có thể sử dụng PHP và Python cùng nhau không?Có, nó sẽ hoạt động và mức độ rủi ro của nó tùy thuộc vào mức độ triển khai của bạn. Điều này là hoàn toàn chấp nhận được nếu được thực hiện một cách chính xác. Tôi đã tích hợp thành công PHP và C, khi PHP đơn giản là quá chậm để thực hiện một số tác vụ thích hợp nhất định trong thời gian thực (IIRC, PHP chậm hơn 7 lần so với đối tác C của nó).
Python tích hợp mô hình PHP như thế nào?Tạo API cho tập lệnh Python của bạn mà tập lệnh PHP của bạn (hoặc bất kỳ tập lệnh nào khác) có thể sử dụng. Kết xuất đầu vào của bạn vào một thư mục mà tập lệnh Python theo dõi dữ liệu, sau đó ghi kết quả vào hệ thống tệp nơi bạn có thể đọc và hiển thị nó bằng PHP
PHP và Python có giống nhau không?Python là ngôn ngữ lập trình hướng đối tượng cấp cao được sử dụng để phát triển ứng dụng nhanh chóng, trong khi PHP là viết tắt của bộ xử lý trước Siêu văn bản được sử dụng để phát triển trang web động hoặc ứng dụng web |