Python chuyển hướng thiết bị xuất chuẩn sang biến

Có thể chuyển hướng thiết bị xuất chuẩn từ chương trình bên ngoài sang biến và thiết bị xuất chuẩn từ chương trình bên ngoài sang biến khác trong một lần chạy không?

Ví dụ

$global:ERRORS = @[];
$global:PROGERR = @[];

function test[] {
    # Can we redirect errors to $PROGERR here, leaving stdout for $OUTPUT?
    $OUTPUT = [& myprogram.exe 'argv[0]', 'argv[1]'];

    if [ $OUTPUT | select-string -Pattern "foo" ] {
        # do stuff
    } else {
        $global:ERRORS += "test[]: oh noes! 'foo' missing!";
    }
}

test;
if [ @[$global:ERRORS].length -gt 0 ] {
    Write-Host "Script specific error occurred";
    foreach [ $err in $global:ERRORS ] {
        $host.ui.WriteErrorLine["err: $err"];
    }
} else {
    Write-Host "Script ran fine!";
}

if [ @[$global:PROGERR].length -gt 0 ] {
    # do stuff
} else {
    Write-Host "External program ran fine!";
}

Một ví dụ buồn tẻ tuy nhiên tôi tự hỏi nếu điều đó là có thể?

Giải pháp tốt nhất

Một tùy chọn là kết hợp đầu ra của thiết bị xuất chuẩn và thiết bị xuất chuẩn thành một luồng duy nhất, sau đó lọc

Dữ liệu từ thiết bị xuất chuẩn sẽ là chuỗi, trong khi thiết bị xuất chuẩn tạo Hệ thống. Sự quản lý. tự động hóa. ErrorRecord đối tượng

$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }

Giải pháp liên quan

Linux – Cách chuyển hướng đầu ra sang tệp và thiết bị xuất chuẩn

Lệnh bạn muốn có tên là

$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
5

foo | tee output.file

Ví dụ: nếu bạn chỉ quan tâm đến thiết bị xuất chuẩn

ls -a | tee output.file

Nếu bạn muốn bao gồm stderr, hãy làm

program [arguments...] 2>&1 | tee outfile

$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
6 chuyển hướng kênh 2 [lỗi xuất chuẩn/lỗi tiêu chuẩn] thành kênh 1 [xuất chuẩn/đầu ra tiêu chuẩn], sao cho cả hai đều được viết là thiết bị xuất chuẩn. Nó cũng được chuyển hướng đến tệp đầu ra đã cho kể từ lệnh
$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
5

Hơn nữa, nếu bạn muốn thêm vào tệp nhật ký, hãy sử dụng

$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
0 làm

program [arguments...] 2>&1 | tee -a outfile

Windows – Chuyển hướng Windows cmd stdout và stderr sang một tệp duy nhất

Bạn muốn

dir > a.txt 2>&1

Cú pháp

$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
6 sẽ chuyển hướng
$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
2 [stderr] sang
$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
3 [stdout]. Bạn cũng có thể ẩn tin nhắn bằng cách chuyển hướng đến
$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
4, giải thích thêm và ví dụ trên MSDN

Chào mừng bạn đến với hướng dẫn thứ ba và cũng là hướng dẫn cuối cùng của loạt bài Python Print. Đến cuối hướng dẫn này, bạn sẽ thành thạo hàm Python Print. Vì vậy, trong hướng dẫn này, tôi sẽ chỉ cho bạn cách tự động chuyển hướng luồng đầu ra trong Lập trình Python

Vấn đề duy nhất với việc chuyển hướng thủ công luồng đầu ra là chúng ta phải đề cập đến “tham số tệp” mỗi khi chúng ta muốn lưu đầu ra vào tệp. Điều đó tốt, nhưng chỉ khi chúng ta phải lưu đầu ra của một hoặc hai hoặc một câu lệnh in cụ thể. Cách tiếp cận này không lý tưởng khi chúng ta muốn lưu kết quả được trả về bởi tất cả các câu lệnh Python Print của chương trình

Đề cập đến tham số tệp với tất cả các câu lệnh in python trong một chương trình không chỉ gây mệt mỏi mà còn dễ mắc lỗi

Chuyển hướng thủ công bản in Python

Trong chuyển hướng thủ công của luồng đầu ra, chúng tôi sử dụng tham số 'tệp' của câu lệnh Python Print để yêu cầu trình thông dịch lưu đầu ra được một hàm trả về vào một tệp. Tôi đã giải thích khái niệm chuyển hướng thủ công tại đây. Hãy tiếp tục và kiểm tra xem

Tự động chuyển hướng bản in Python

Trong chuyển hướng tự động, chúng tôi sửa đổi luồng đầu ra tiêu chuẩn và đặt nó để lưu đầu ra vào một tệp thay vì hiển thị trên màn hình. Lợi ích của việc thực hiện sửa đổi này là bạn không phải dựa vào tham số 'tệp' để lưu vĩnh viễn đầu ra vào đĩa cứng của mình

Tuy nhiên, vấn đề duy nhất với việc tự động chuyển hướng luồng đầu ra là việc đặt lại luồng về trạng thái mặc định cần thêm một chút nỗ lực

Những gì bạn sẽ học ngày hôm nay-

Trong hướng dẫn này, tôi sẽ chỉ cho bạn, làm thế nào để –

  • Tự động chuyển hướng luồng đầu ra và
  • Đặt lại về trạng thái mặc định

Bây giờ bạn đã có một ý tưởng rõ ràng về chuyển hướng thủ công và tự động luồng lập trình Python, tôi đoán chúng ta nên làm một số ví dụ

Ví dụ về Chuyển hướng tự động – Hàm in Python

Sử dụng các ví dụ đơn giản này, chúng ta sẽ cố gắng hiểu rõ hơn về khái niệm lập trình Python này

Đọc được đề xuất.
Trước khi bắt đầu, tôi khuyên bạn nên xem qua phần hướng dẫn trước vì chúng ta sẽ sử dụng các khái niệm khác nhau từ đó. Bạn có thể bấm vào đây cho điều đó.

Bước 1. Tạo tập lệnh Python

Vì chúng ta sẽ lưu đầu ra được trả về bởi câu lệnh Python Print vào một tệp, do đó, nên tạo một thư mục dự án chứa tất cả các tệp. Theo tất cả các tệp, ý tôi là tệp Python Script nơi chúng tôi sẽ viết mã. Và tệp sẽ chứa kết quả đầu ra của câu lệnh in

Trong trường hợp của tôi, tôi đã tạo thư mục này vào thư mục 'Tài liệu của tôi' và đặt tên là 'Hướng dẫn về Python'. Bạn có thể tạo thư mục của mình ở bất cứ đâu bạn muốn trên hệ thống của mình và đặt tên cho nó là bất cứ thứ gì bạn muốn

Bước 2. Tạo tập lệnh Python

Khi bạn đã tạo xong thư mục, tiếp theo bạn phải tạo Tập lệnh Python. Tệp Python Script này sẽ chứa tất cả các mã Python của chúng tôi. Để trình diễn, tôi đã tạo một Tệp Python và đặt tên là 'tut21. py'. Một lần nữa, bạn có thể đặt tên cho tệp của mình bất cứ điều gì bạn muốn

Tại sao chúng ta đang làm điều này?

Như tôi đã đề cập trước đó, luôn luôn là một cách tốt để giữ cho dự án của bạn được sắp xếp thành một thư mục chuyên dụng. Lợi ích chính của việc làm đó là tất cả các tài nguyên theo yêu cầu của dự án hoặc được tạo bởi Mã Python đều ở một nơi. Nó dễ dàng hơn để tìm thấy chúng

Trong ngữ cảnh của chúng tôi, thư mục 'Hướng dẫn về Python' mà tôi đã tạo trong thư mục 'Tài liệu của tôi' chứa tập lệnh Python. Tôi sẽ viết mã cho phần trình diễn hôm nay vào tập lệnh đó. Mã mà chúng ta sẽ viết hôm nay sẽ tạo một tệp. Ngoài ra, tệp đó sẽ chứa tất cả các đầu ra được trả về bởi tất cả các lệnh gọi hàm Python Print

Mã này sẽ tạo tệp đó vào thư mục dự án chứa tệp script python. Mà trong trường hợp này là 'Hướng dẫn Python'. Bằng cách đó, chúng tôi không phải nỗ lực nhiều hơn để tìm tệp được tạo bởi mã Python

Bước 3. Viết mã để tự động chuyển hướng bản in Python

Bây giờ chúng tôi đã tổ chức dự án của mình, tiếp theo chúng tôi phải viết mã. Đối với điều đó, chỉ cần mở Tệp tập lệnh Python mà bạn vừa tạo và bắt đầu viết mã này

$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
1

Đây là phần đầu tiên của mã cho chức năng Tự động chuyển hướng in Python

Tuyên bố 1

Trong dòng đầu tiên, tôi đã nhập mô-đun 'sys'. 'sys' là một mô-đun dựng sẵn của các thư viện Python

Tuyên bố 2

Như bạn có thể thấy, câu lệnh 2 là một câu lệnh gán. Ở phía bên trái của toán tử gán, chúng ta có “sys. tiêu chuẩn”. thiết bị xuất chuẩn ở đây là một đối tượng tệp. Nếu không được đặt thành bất cứ thứ gì thì theo mặc định, nó sẽ gửi đầu ra tới luồng đầu ra mặc định. Đó hầu như luôn luôn là màn hình của hệ thống của bạn. Nhưng chúng ta có thể thiết lập lại nó

Ở phía bên tay phải, chúng ta có chức năng Python Open. Chúng ta đã biết rằng hàm này trả về một đối tượng tệp của tệp có tên mà chúng ta đã chỉ định trong đó

Khi thực thi câu lệnh này, trình thông dịch sẽ chuyển hướng luồng đầu ra tới tệp có đối tượng được hàm open của Python trả về. Tệp đó trong trường hợp của chúng tôi sẽ là 'Tut20_Output. txt'

Ngoài ra, tôi đã sử dụng 'a' làm chế độ mở [tham số thứ hai của chức năng 'mở'], do đó, Tut20_Output. txt sẽ được mở ở chế độ 'chắp thêm'. Điều này có nghĩa là trên mỗi lần thực thi, dữ liệu mà chương trình trả về sẽ được thêm vào cuối tệp

Bạn có thể đọc chi tiết về Chức năng mở Python tại đây

Do đó, khi thực thi câu lệnh này, trình thông dịch sẽ đặt lại hành vi mặc định của “thiết bị xuất chuẩn” từ việc in đầu ra trên màn hình sang lưu nó vào một tệp. Mà bạn đã chỉ định trong hàm Python Open

$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
2

Đây là phần thứ hai của Chương trình Python. Phần thứ hai chỉ chứa các lệnh gọi hàm Python Print. Nếu bạn đọc kỹ chúng thì bạn sẽ phát hiện ra rằng tôi đã không sử dụng tham số 'tệp' trong bất kỳ thông số nào. Lý tưởng nhất là khi thực hiện, bạn sẽ thấy đầu ra của chúng trên màn hình của mình, vì đó là hành vi thông thường của chúng

Nhưng ở đây khi thực hiện, bạn sẽ phát hiện ra rằng, đầu ra sẽ không có trên màn hình của bạn mà nó sẽ được lưu vào tệp

Tại sao lại như vậy?

Câu lệnh thứ hai [kiểm tra phần 1 của chương trình] của Chương trình Python này đã thay đổi luồng đầu ra từ in kết quả đầu ra trên màn hình thành lưu vào tệp. Do đó không có đầu ra trên màn hình thời gian này

Đó là cách chúng tôi chuyển hướng luồng đầu ra trong Lập trình Python. Hy vọng cuộc biểu tình này đã giúp với những nghi ngờ của bạn. Tuy nhiên, nếu bạn có bất kỳ, xin vui lòng để lại cho tôi một tin nhắn trên Facebook của tôi

Bây giờ chúng ta hãy đến phần thứ hai của hướng dẫn – đặt lại luồng đầu ra về trạng thái mặc định

Xem Video.
Nếu bạn học nhanh hơn bằng cách xem các video hướng dẫn thì tôi đã làm một video dành riêng cho bạn. Kiểm tra nó

Đặt lại luồng đầu ra

Giả sử, bạn đã thêm một câu lệnh in vào chương trình của mình và bạn không muốn lưu câu lệnh đó vào tệp. Thay vào đó, bạn muốn hiển thị lại cho người dùng. Để làm được điều đó, bạn phải đặt lại luồng đầu ra về hành vi mặc định của nó. Hành vi mặc định đó là hiển thị đầu ra trên màn hình

Để đặt lại luồng đầu ra trong lập trình Python, bạn phải tuân theo quy trình gồm hai bước. Hãy xem nó là gì –

Bước 1. Lưu trạng thái mặc định của Python Print vào một biến

Đầu tiên, bạn phải lưu trạng thái mặc định là ‘sys. stdout' thành một biến. Ngoài ra, hãy đảm bảo rằng bạn phải tạo biến này trước câu lệnh chứa lệnh gọi hàm Python Open. Mà trong trường hợp của chúng tôi, là câu lệnh thứ hai của phần 1 của chương trình

Bước 2. Gán biến đó vào 'sys. thiết bị xuất chuẩn

Tôi biết nó nghe có vẻ khó hiểu nhưng đó là cách nó hoạt động. Bạn không thể gán sys. thiết bị xuất chuẩn vào hệ thống. tiêu chuẩn, như thế này

$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
3

Tôi đã chứng minh và giải thích điều này trong video hướng dẫn, bạn có thể kiểm tra tại đây. Điều này sẽ không làm việc

Cách thích hợp để đặt lại hành vi mặc định là lưu trữ trạng thái vào biến và sau đó gán biến đó vào tệp 'sys. thiết bị xuất chuẩn. Như thế này

$allOutput = & myprogram.exe 2>&1
$stderr = $allOutput | ?{ $_ -is [System.Management.Automation.ErrorRecord] }
$stdout = $allOutput | ?{ $_ -isnot [System.Management.Automation.ErrorRecord] }
4

Đầu ra của tất cả các lệnh gọi hàm in Python trước câu lệnh 9 sẽ được lưu vào tệp trong khi đầu ra của tất cả các lệnh gọi hàm in Python sau câu lệnh 9 sẽ được hiển thị lại cho bạn trên màn hình

Đó là cách chúng tôi sửa đổi và đặt lại luồng đầu ra trong lập trình Python. Hy vọng bạn thích hướng dẫn. Nếu bạn vẫn còn thắc mắc, vui lòng để lại tin nhắn cho tôi trên Facebook hoặc Twitter.

Ngoài ra, bạn đã đăng ký kênh YouTube của tôi chưa, nếu chưa thì hãy đảm bảo đăng ký.

Cảm ơn và chúc một ngày tốt lành

  • THẺ
  • trăn 21
  • in bằng trăn
  • hướng dẫn python 21

Facebook

Twitter

Pinterest

WhatsApp

liên kết

ReddIt

Bài viết trước Mở tệp bằng hàm OPEN của Python

Bài viết tiếp theo Hướng dẫn cơ bản về câu lệnh If trong Python

Manish Sharma

http. //www. YouTube. com/RebellionRider

Manish Sharma, người nhận Giải thưởng ORACLE ACE, là chuyên gia tư vấn & đào tạo cơ sở dữ liệu Oracle. Anh ấy có một kênh YouTube cực kỳ thành công tên là Rebellion Rider. Đây là một trong những kênh xếp hạng hàng đầu khi nói đến các hướng dẫn về cơ sở dữ liệu Oracle với hơn 10 triệu lượt xem

Làm cách nào để lưu trữ đầu ra của bàn điều khiển trong một biến Python?

Bạn lưu trữ đầu ra bằng Python như thế nào? .
Bước 1. Nhập thư viện StringIO và sys
Bước 2. Giữ thiết bị xuất chuẩn trong biến tạm thời
Bước 3. Nắm bắt đầu ra tiêu chuẩn bằng đối tượng StringIO
Bước 4. Gán Luồng đầu ra tiêu chuẩn cho đối tượng StringIO
Bước 5. In ra đầu ra tiêu chuẩn

Bạn có thể gán một biến cho câu lệnh in không?

Câu lệnh in cũng hoạt động với các biến . Trong mỗi trường hợp, kết quả là giá trị của biến. Các biến cũng có các loại; . Kiểu của một biến là kiểu của giá trị mà nó tham chiếu đến.

Làm cách nào để bạn chuyển hướng đầu ra từ thiết bị xuất chuẩn sang một tệp trong Python?

cách dễ nhất để chuyển hướng thiết bị xuất chuẩn trong python là chỉ cần gán cho nó một đối tượng tệp đang mở . chúng ta hãy xem một ví dụ đơn giản. nhập sys def redirect_to_file[văn bản]. ban đầu = hệ thống. hệ thống thiết bị xuất chuẩn.

Chủ Đề