Hướng dẫn python, os system run in background - python, hệ điều hành chạy trong nền

Cả đầu ra bắt giữ và chạy trên nền với threading

Như đã đề cập trong câu trả lời này, nếu bạn nắm bắt đầu ra bằng stdout= và sau đó cố gắng read(), thì các khối quy trình.

Tuy nhiên, có những trường hợp bạn cần điều này. Ví dụ: tôi muốn khởi chạy hai quy trình nói chuyện qua một cổng giữa chúng và lưu stdout của họ vào tệp nhật ký và stdout.

Mô -đun threading cho phép chúng tôi làm điều đó.

Đầu tiên, hãy xem cách thực hiện phần chuyển hướng đầu ra một mình trong câu hỏi này: Python popen: Viết vào stdout và đăng nhập đồng thời

Then:

main.py

#!/usr/bin/env python3

import os
import subprocess
import sys
import threading

def output_reader(proc, file):
    while True:
        byte = proc.stdout.read(1)
        if byte:
            sys.stdout.buffer.write(byte)
            sys.stdout.flush()
            file.buffer.write(byte)
        else:
            break

with subprocess.Popen(['./sleep.py', '0'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc1, \
     subprocess.Popen(['./sleep.py', '10'], stdout=subprocess.PIPE, stderr=subprocess.PIPE) as proc2, \
     open('log1.log', 'w') as file1, \
     open('log2.log', 'w') as file2:
    t1 = threading.Thread(target=output_reader, args=(proc1, file1))
    t2 = threading.Thread(target=output_reader, args=(proc2, file2))
    t1.start()
    t2.start()
    t1.join()
    t2.join()

sleep.py

#!/usr/bin/env python3

import sys
import time

for i in range(4):
    print(i + int(sys.argv[1]))
    sys.stdout.flush()
    time.sleep(0.5)

Sau khi chạy:

./main.py

Stdout được cập nhật cứ sau 0,5 giây cho mỗi hai dòng chứa:

0
10
1
11
2
12
3
13

và mỗi tệp nhật ký chứa nhật ký tương ứng cho một quy trình nhất định.

Lấy cảm hứng từ: https://eli.thegreenplace.net/2017/interacting-with-a-long-ricky-child-process-in-python/

Được thử nghiệm trên Ubuntu 18.04, Python 3.6.7.

  • Kiểm tra các quy trình và dịch vụ đang chạy
  • Chạy các quy trình nền trong Python
    • Bước 1: Tạo tệp Python với mã mà chúng tôi quan tâm đến việc chạy ở chế độ nền
    • Bước 2: Tạo một tập lệnh Python khác sẽ đánh thức quá trình Python trong nền
    • Gói xử lý phụ:
    • Bước 3: Thực hiện tệp Run_Process.py trên Trình chỉnh sửa mã
  • Giết một quá trình chạy
    • Sử dụng Trình quản lý nhiệm vụ:
    • Trên dấu nhắc lệnh:
    • Trong Python
  • Sự kết luận

Quy trình nền là các quy trình máy tính chạy đằng sau hậu trường. Ưu điểm cốt lõi của các quá trình chạy trong nền là bạn có thể thực hiện các nhiệm vụ khác ở phía trước. Trong bài viết này, chúng tôi sẽ thảo luận về cách chạy các quy trình nền bằng Python. & NBSP; Chúng tôi cũng sẽ thảo luận về cách kiểm tra và ngừng chạy các quy trình/ứng dụng.

Nội dung

  • 1 Kiểm tra các quy trình và dịch vụ đang chạy Checking Running Processes and Services
  • 2 Quy trình nền đang chạy trong Python Running background processes in Python
    • 2.1 Bước 1: Tạo tệp Python với mã mà chúng tôi quan tâm đến việc chạy ở chế độ nền Step 1: Create a Python file with the code we are interested in running in the background
    • 2.2 Bước 2: Tạo một tập lệnh Python khác sẽ đánh thức quá trình Python trong nền Step 2: Create another Python script that will wake up the Python process in the background
    • 2.3 Gói xử lý phụ: subprocess package:
    • 2.4 Bước 3: Thực hiện tệp Run_Process.py trên Trình chỉnh sửa mã Step 3: Execute the run_process.py file on the code editor
  • 3 Giết một quá trình chạy Killing a running process
    • 3.1 Sử dụng Trình quản lý tác vụ: Using Task Manager:
    • 3.2 trên dấu nhắc lệnh: On the command prompt:
    • 3.3 Trong Python In Python
  • 4. Kết luận Conclusion

Kiểm tra các quy trình và dịch vụ đang chạy

Chạy các quy trình nền trong Python

Hướng dẫn python, os system run in background - python, hệ điều hành chạy trong nền

Bước 1: Tạo tệp Python với mã mà chúng tôi quan tâm đến việc chạy ở chế độ nền

Bước 2: Tạo một tập lệnh Python khác sẽ đánh thức quá trình Python trong nền

Hướng dẫn python, os system run in background - python, hệ điều hành chạy trong nền

Chạy các quy trình nền trong Python

Bước 1: Tạo tệp Python với mã mà chúng tôi quan tâm đến việc chạy ở chế độ nềnsubprocess and os, can be used to run background processes. The general syntax is:

subprocess:

Bước 2: Tạo một tập lệnh Python khác sẽ đánh thức quá trình Python trong nềnsubprocess

subprocess.Popen().Popen(<listof commandsandoptions>)

os:

Gói xử lý phụ:os

os.system().system(<the commandsandoptions>)

Bước 3: Thực hiện tệp Run_Process.py trên Trình chỉnh sửa mã

Bước 1: Tạo tệp Python với mã mà chúng tôi quan tâm đến việc chạy ở chế độ nền

Bước 2: Tạo một tập lệnh Python khác sẽ đánh thức quá trình Python trong nền

Gói xử lý phụ:time

withopen("results.txt","a+")asfp:open("results.txt","a+")asfp:

    foriinrange(5):foriinrange(5):

Bước 3: Thực hiện tệp Run_Process.py trên Trình chỉnh sửa mã# Each loop should take around

Giết một quá trình chạy# 20 secs to execute. Total ~ 100 seconds

        time.sleep(20)time.sleep(20)

Sử dụng Trình quản lý nhiệm vụ:fp.write(f"{i}\n")

Trên dấu nhắc lệnh:

Bước 2: Tạo một tập lệnh Python khác sẽ đánh thức quá trình Python trong nền

Gói xử lý phụ:, subprocess, and os, to run the code in “process.py” in the background.

Bước 3: Thực hiện tệp Run_Process.py trên Trình chỉnh sửa mã

Gói xử lý phụ:

Bước 2: Tạo một tập lệnh Python khác sẽ đánh thức quá trình Python trong nềnsubprocess

subprocess.Popen(["python","process.py"],shell=True).Popen(["python","process.py"],shell=True)

Gói xử lý phụ:os package, we have

Gói xử lý phụ:os

Bước 3: Thực hiện tệp Run_Process.py trên Trình chỉnh sửa mã.system("python process.py")

Bước 3: Thực hiện tệp Run_Process.py trên Trình chỉnh sửa mã

Giết một quá trình chạy

Quá trình này khóa tệp results.txt, vì vậy nếu bạn cố gắng xóa nó trong quá trình hoạt động chương trình, bạn sẽ được chào đón với thông báo rằng tệp đang được sử dụng, vì vậy bạn có thể chờ hoặc tiêu diệt quy trình.

Giết một quá trình chạy

Chúng tôi cần tên hình ảnh hoặc ID quy trình (PID) để tiêu diệt một quá trình đang chạy. Thông tin này có thể được tìm thấy trên Trình quản lý tác vụ hoặc bằng cách chạy danh sách TaskL trên dòng lệnh. Bạn có thể cần nhấp chuột phải vào phần tiêu đề và chọn tên PID và xử lý trên Trình quản lý tác vụ (xem bên dưới).. This information can be found on the Task Manager or by running the tasklist on the command line. You might need to right-click on the title section and select PID and Process name on Task Manager (see below).

Hướng dẫn python, os system run in background - python, hệ điều hành chạy trong nền

Bất kỳ tùy chọn nào sau đây đều có thể được sử dụng để chấm dứt quy trình chạy (tham khảo ảnh chụp màn hình trên của Trình quản lý tác vụ cho các điểm sau).

Sử dụng Trình quản lý nhiệm vụ:

Chọn quy trình, nhấp chuột phải và nhấp vào Tác vụ Kết thúc ở phía dưới bên phải của cửa sổ Trình quản lý.

Trên dấu nhắc lệnh:

  • Ví dụ, khi sử dụng PID Run, Taskill /PID /PID /F, ví dụ,, Task Taskill /PID 11024 /F, để tiêu diệt trình tải CTF.taskkill /PID /PID /F“, for example, “taskkill /PID 11024 /F” to kill CTF Loader.
  • Khi sử dụng tên hình ảnh, hãy chạy Task Taskill /IM /IM /F, & NBSP; Ví dụ, Taskkill /im ctfmon.exe /f, để tiêu diệt bộ tải CTF.taskkill /IM /IM /F”  for example “taskkill /IM ctfmon.exe /F” to kill CTF Loader.

Trong Python

Bạn có thể tiêu diệt các tác vụ đang chạy bằng cách sử dụng quá trình phụ hoặc hệ điều hành như sau (lưu ý rằng bạn cần nhập các gói này):subprocess or os as follows (note that you need to import these packages):

  • phụ
  • Os.System (Hồi Taskkill /IM ctfmon.exe /f,)

Lưu ý: Tùy chọn /F được cấp cho lệnh Taskkill là tùy chọn. Nó được sử dụng để chấm dứt một quá trình một cách mạnh mẽ. Tùy chọn này có thể cần thiết khi đóng một tác vụ được sử dụng bởi một quy trình khác, ví dụ. The /F option issued to the taskkill command is optional. It is used to terminate a process forcefully. This option might be needed when closing a task used by another process, for example.

PID thay đổi mỗi khi bạn mở quy trình/ứng dụng. Điều này có nghĩa là PID được sử dụng để tiêu diệt một tác vụ được tạo bởi một ứng dụng nhất định có thể không hoạt động khi ứng dụng được đóng và mở lại. Trong trường hợp như vậy, tên hình ảnh là một tùy chọn tốt hơn để sử dụng.. This means that the PID used to kill a task generated by a given app may not work when an app is closed and opened again. In such a case, Image Name is a better option to use.

Sự kết luận

Trong bài viết này, chúng tôi đã thảo luận về cách thức dậy một quá trình và tiếp tục chạy trong nền bằng Python. Chúng tôi đã chứng minh làm thế nào điều này được thực hiện bằng cách chạy một quy trình Python.exe trong nền (bạn có thể làm điều này với bất kỳ quy trình nào). Cuối cùng, chúng tôi đã chỉ ra cách chấm dứt một quy trình đang chạy bằng cách sử dụng các gói Trình quản lý nhiệm vụ, dấu nhắc lệnh và Python.

Hướng dẫn python, os system run in background - python, hệ điều hành chạy trong nền

Chương trình Python có thể chạy trong nền không?

Cách dễ nhất để chạy tập lệnh Python để chạy trong nền là sử dụng tính năng Cronjob (trong MacOS và Linux). Trong Windows, chúng ta có thể sử dụng Trình lập lịch tác vụ Windows. Sau đó, bạn có thể đưa ra đường dẫn của tệp tập lệnh Python của bạn để chạy vào một thời điểm cụ thể bằng cách đưa ra các chi tiết thời gian.use cronjob feature (in macOS and Linux). In windows, we can use Windows Task Scheduler. You can then give the path of your python script file to run at a specific time by giving the time particulars.

Làm cách nào để chạy một lệnh trong trăn nền?

Và nếu bạn cần chạy các lệnh shell không đồng bộ trong nền, bạn có thể sử dụng quy trình con.popen () thay thế. Với cả hai quá trình phụ. Chạy () và quy trình con.subprocess. Popen() instead. With both subprocess. run() and subprocess.

Làm cách nào để ngăn một tập lệnh Python chạy trong nền?

# Tập lệnh đơn giản để bắt đầu / dừng tập lệnh Python ở chế độ nền.# Để sử dụng: # Chỉ cần chạy: "./startstop.sh".Nếu quá trình đang chạy, nó sẽ dừng nó hoặc nó sẽ bắt đầu nếu không.Just run: "./startstop.sh". If the process is running it will stop it or it will start it if not.

Làm cách nào để chạy một quy trình hệ thống trong Python?

Cách tiếp cận đầu tiên và thẳng nhất để chạy lệnh shell là bằng cách sử dụng os.system ():..
Nhập hệ điều hành hệ điều hành.hệ thống ('ls -l').
Nhập luồng hệ điều hành = hệ điều hành.....
Nhập quá trình phụ = quy trình con.....
với Open ('test.txt', 'w') là f: quá trình = quy trình con.....
Nhập Shlex Shlex.....
quá trình = quy trình con.....
process..