Python đọc đầu ra PowerShell

Không chắc hệ điều hành của bạn là gì, nhưng nếu là Windows thì bạn có thể cần thay đổi đường dẫn của mình để sử dụng dấu gạch chéo ngược thay vì bạn đã viết nó bằng dấu gạch chéo lên hoặc chỉ cần sử dụng Đường dẫn tham gia

Ngoài ra, bạn có thể chạy trực tiếp một exe trong PowerShell bằng cách sử dụng toán tử cuộc gọi [&], do đó bạn không nhất thiết phải sử dụng Start-Process để chạy Python trừ khi bạn có lý do cụ thể để chạy. Cũng có thể sử dụng Invoke-Expression và chuyển đầu ra thành một tệp

Tôi đang thực hiện một thử nghiệm và nghĩ rằng việc tận dụng Python sẽ rất thú vị. Là một phần của thử nghiệm đó, tôi sẽ cần thực thi PowerShell từ Python vì chỉ có các lệnh ghép ngắn PowerShell mới có thể thực hiện những gì tôi cần. Sau một tuần nghiên cứu một chút về việc để nó sôi, tôi đã có thể ngồi xuống và giải quyết nó vào đêm qua. Một phần là do tôi không quen với Python cho những gì tôi đang làm, và phần khác chỉ là tôi không nghĩ về vấn đề một cách tổng thể

bạn cần gì

Bạn sẽ cần cài đặt PowerShell trên hệ thống của mình và Python 3. 6+. Điều này sẽ hoạt động trên nhiều nền tảng. Tôi đã thử nghiệm trên Kubfox 20. 10 đang chạy PowerShell dưới dạng gói chụp nhanh. Bạn sẽ không cần bất kỳ thư viện bên ngoài nào vì chúng tôi sử dụng một trong nhiều thư viện tuyệt vời có sẵn với Python

Mật mã

Tất cả những gì chúng ta cần là tạo một cuộc gọi tệp ps. py, sau đó chúng ta có thể nhập mô-đun quy trình con

import subprocess

Bây giờ chúng ta có thể tạo phương thức chạy mà chúng ta sẽ sử dụng để thực thi lệnh PowerShell của mình

def run[self, cmd]:
    completed = subprocess.run[["powershell", "-Command", cmd], capture_output=True]
    return completed

Hãy làm cho tệp Python của chúng ta có thể thực thi được và sau đó tạo các lệnh mà chúng ta muốn thực thi. Một lệnh có cú pháp đúng và một lệnh có cú pháp sai. Điều này sẽ trình bày cách sử dụng sự trở lại của quy trình con. phương pháp chạy

if __name__ == '__main__':
    hello_command = "Write-Host 'Hello Wolrd!'"
    hello_info = run[hello_command]
    if hello_info.returncode != 0:
        print["An error occured: %s", hello_info.stderr]
    else:
        print["Hello command executed successfully!"]
    
    print["-------------------------"]
    
    bad_syntax_command = "Write-Hst 'Incorrect syntax command!'"
    bad_syntax_info = run[bad_syntax_command]
    if bad_syntax_info.returncode != 0:
        print["An error occured: %s", bad_syntax_info.stderr]
    else:
        print["Bad syntax command executed successfully!"]

Đây là tập tin hoàn chỉnh

import subprocess


def run[self, cmd]:
    completed = subprocess.run[["powershell", "-Command", cmd], capture_output=True]
    return completed


if __name__ == '__main__':
    hello_command = "Write-Host 'Hello Wolrd!'"
    hello_info = run[hello_command]
    if hello_info.returncode != 0:
        print["An error occured: %s", hello_info.stderr]
    else:
        print["Hello command executed successfully!"]
    
    print["-------------------------"]
    
    bad_syntax_command = "Write-Hst 'Incorrect syntax command!'"
    bad_syntax_info = run[bad_syntax_command]
    if bad_syntax_info.returncode != 0:
        print["An error occured: %s", bad_syntax_info.stderr]
    else:
        print["Bad syntax command executed successfully!"]

thực thi ps. py, và chúng ta có thể thấy đầu ra. Lệnh đầu tiên không thành công và trả về mã thoát bằng 0 và chúng tôi in ra rằng nó đã chạy thành công. Lệnh thứ hai có lỗi đánh máy và chúng tôi nhận được mã thoát của lệnh mà sau đó chúng tôi in lỗi xuất phát từ lỗi tiêu chuẩn

$ python ps.py
Hello command executed successfully!
-------------------------
An error occurred: %s b"\x1b[91mWrite-Hst: \x1b[91mThe term 'Write-Hst' is not recognized as the name of a cmdlet, function, script file, or operable program.\nCheck the spelling of the name, or if a path was included, verify that the path is correct and try again.\x1b[0m\n"

Phần kết luận

Vậy là xong, bây giờ bạn có thể thoải mái xây dựng bất kỳ loại lệnh nào mà bạn muốn thực thi, kể cả các lệnh nhiều dòng và nó sẽ hoạt động

Chủ Đề