source

sys.stdout의 차이.쓰고 인쇄할 수 있습니까?

gigabyte 2022. 9. 12. 11:42
반응형

sys.stdout의 차이.쓰고 인쇄할 수 있습니까?

sys.stdout.write()print무슨 일입니까?

(예: 퍼포먼스의 향상, 보다 알기 쉬운 코드)

print는 입력(수정 가능하지만 기본적으로는 arg와 newline 사이에 공백이 있음)을 포맷하여 지정된 객체의 쓰기 함수를 호출하는 얇은 래퍼입니다.로는 이 는 " " " 입니다.sys.stdout은 " "ron" 형식, "ron" 형식을 하여 수행할 수 있습니다.예를 들어 다음과 같습니다.

print >> open('file.txt', 'w'), 'Hello', 'World', 2+3

참조: https://docs.python.org/2/reference/simple_stmts.html?highlight=print#the-print-statement


3. Python 3.x의 print, 이 할 수 .sys.stdoutfile★★★★★★ 。

print('Hello', 'World', 2+3, file=open('file.txt', 'w'))

https://docs.python.org/3/library/functions.html#print 를 참조해 주세요.


.6 Python 2.6+의 print는 아직이지만, '일부러', '일부러', '일부러', '일부러 할 수 .

from __future__ import print_function

업데이트: Bakuriu는 인쇄 기능과 인쇄 스테이트먼트(더 일반적으로 기능과 스테이트먼트) 사이에 약간의 차이가 있음을 지적하기 위해 코멘트했습니다.

인수 평가 시 오류가 발생한 경우:

print "something", 1/0, "other" #prints only something because 1/0 raise an Exception

print("something", 1/0, "other") #doesn't print anything. The function is not called

print먼저 오브젝트를 문자열로 변환합니다(아직 문자열이 아닌 경우).또한 줄의 시작과 끝에 줄 바꿈 문자가 아닌 경우 개체 앞에 공백이 표시됩니다.

「」를 사용하고 stdout오브젝트를 직접 문자열로 변환해야 합니다(예를 들어 "str"를 호출하여).새 행 문자가 없습니다.

그렇게

print 99

는 다음과 같습니다.

import sys
sys.stdout.write(str(99) + '\n')

다음은 Mark Lutz의 Learning Python에 기초한 샘플 코드입니다.

import sys
temp = sys.stdout                 # store original stdout object for later
sys.stdout = open('log.txt', 'w') # redirect all prints to this log file
print("testing123")               # nothing appears at interactive prompt
print("another line")             # again nothing appears. it's written to log file instead
sys.stdout.close()                # ordinary file object
sys.stdout = temp                 # restore print commands to interactive prompt
print("back to normal")           # this shows up in the interactive prompt

로그 열기텍스트 에디터의 txt에는 다음이 표시됩니다.

testing123
another line

가 묻고 싶은 것은 '아예'가 ''로 되어 하는 입니다.sys.stdout.write()print

얼마 전 스크립트 작성을 마치고 Unix 서버에 업로드했습니다.가 사용되었습니다.print서버 로그에는 표시되지 않습니다.

는, 「이렇게 해 주세요」라고 하는 한 경우가 있습니다.sys.stdout.write대신.

당신당신이 원하는하나 있다 적어도 상황이고 싶어 적어도 하나의 상황이 있습니다.sys.stdout대신 인쇄의.인쇄 대신.

예를 들어 진행 표시줄이나 상태 메시지를 그리는 동안 다음 행으로 이동하지 않고 행을 덮어쓰려면 다음과 같은 작업을 반복해야 합니다.

Note carriage return-> "\rMy Status Message: %s" % progress

이후 인쇄 newline을 추가 그리고 또한을 사용하여 인쇄에 새로운 선이 추가되기 때문에 사용하시는 것이 좋습니다 더 낫다.sys.stdout.

제가 궁금한 건 이 상황에 대해서sys.stdout.write()보다 바람직하다print

If you're writing a command line application that can write to both files and stdout then it is handy. You can do things like:

def myfunc(outfile=None):
    if outfile is None:
        out = sys.stdout
    else:
        out = open(outfile, 'w')
    try:
        # do some stuff
        out.write(mytext + '\n')
        # ...
    finally:
        if outfile is not None:
            out.close()

즉, 이 기능을 사용할 수 없습니다.with open(outfile, 'w') as out:하지만 가끔은 그만한 가치가 있어요

It is preferable when dynamic printing is useful, for instance, to give information in a long process:

import time, sys
Iterations = 555
for k in range(Iterations+1):

    # Some code to execute here ...

    percentage = k / Iterations
    time_msg = "\rRunning Progress at {0:.2%} ".format(percentage)
    sys.stdout.write(time_msg)
    sys.stdout.flush()
    time.sleep(0.01)

Python 2.x에서는print스테이트먼트는 사용자가 지정한 내용을 미리 처리하여 중간에 문자열로 변환하고 구분자 및 새 줄을 처리하며 파일로 리디렉션할 수 있습니다.Python 3.x는 그것을 함수로 바꾸지만 여전히 같은 책임을 지고 있다.

sys.stdout is a file or file-like class that has methods for writing to it which take strings or something along that line.

의 차이점print그리고.sys.stdout.writePython 3에서 지적하는 것은 터미널에서 실행될 때 반환되는 값이기도 합니다.Python 3에서는sys.stdout.write는 문자열 길이를 반환합니다.print그냥 돌려줘None.

So for example running following code interactively in the terminal would print out the string followed by its length, since the length is returned and output when run interactively:

>>> sys.stdout.write(" hi ")
 hi 4
>>> sys.stdout.write(1)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: expected a string or other character buffer object
>>> sys.stdout.write("a")
a>>> sys.stdout.write("a") ; print(1)
a1

Observing the example above:

  1. sys.stdout.write하지만non-string 개체를 쓰지 않을 거야.print할 것이다

  2. sys.stdout.write결국지만, 한 새로운 라인 상징을 추가하지 않을 거야.print할 것이다

If we dive deeply,

sys.stdout는 print()의 출력을 위해 사용할 수 있는 파일 개체입니다.

만약 이유 주장print()지정되지 않는다,sys.stdout will be used

In Python 3 there is valid reason to use print over sys.stdout.write, but this reason can also be turned into a reason to use sys.stdout.write instead.

This reason is that, now print is a function in Python 3, you can override this. So you can use print everywhere in a simple script and decide those print statements need to write to stderr instead. You can now just redefine the print function, you could even change the print function global by changing it using the builtins module. Off course with file.write you can specify what file is, but with overwriting print you can also redefine the line separator, or argument separator.

The other way around is. Maybe you are absolutely certain you write to stdout인쇄를 다른 것으로 변경하는 것도 알고 있습니다.sys.stdout.write에러 로그나 다른 것에 인쇄를 사용합니다.

그래서 어떻게 쓰느냐에 따라 사용법이 달라집니다. print더 유연하지만, 그것이 그것을 사용하고 사용하지 않는 이유가 될 수 있습니다.그 대신 유연성을 선택하고 인쇄를 선택합니다.사용해야 하는 다른 이유print대신 익숙함이다.인쇄라는 것이 무엇을 의미하는지 더 많은 사람들이 알게 될 것입니다.sys.stdout.write.

Python 2에서 함수를 전달해야 할 경우, 할당이 가능합니다.os.sys.stdout.write변수로 변환합니다.(REP에서) 이 작업을 수행할 수 없습니다.print.

>import os
>>> cmd=os.sys.stdout.write
>>> cmd('hello')
hello>>>

그것은 예상대로 된다.

>>> cmd=print
  File "<stdin>", line 1
    cmd=print
            ^
SyntaxError: invalid syntax

그것은 효과가 없다. print마법의 기능이야

sys.stdout이 되는 상황이 있습니까?write()는 인쇄하는 것이 바람직합니까?

멀티스레딩 상황에서는 stdout이 인쇄보다 더 잘 작동한다는 것을 알게 되었습니다.큐(FIFO)를 사용하여 인쇄할 행을 저장하고 인쇄 큐가 비워질 때까지 모든 스레드를 인쇄 라인 앞에 둡니다.그래도 인쇄를 사용하면 디버깅 I/O 최종 \n(Wing Pro IDE 사용)이 손실될 수 있습니다.

std.out을 문자열에 \n과 함께 사용하면 디버깅 I/O 형식과 \n이 정확하게 표시됩니다.

sys.stdout이 되는 상황이 있습니까?write()는 인쇄하는 것이 바람직합니까?

예를 들면, 인수로서 숫자를 건네면 피라미드 형식으로 별을 인쇄하는 작은 함수를 만들고 있습니다만, end="사용해 별도 행으로 인쇄할 수 있습니다만, sys.stdout을 사용했습니다. 작업을 수행하기 위해 인쇄물과 연계하여 쓰다.stdout에 대해 자세히 설명하겠습니다.같은 행에 인쇄를 합니다. 행에서는, 항상 다른 행에 인쇄 내용을 인쇄합니다.

import sys

def printstars(count):

    if count >= 1:
        i = 1
        while (i <= count):
            x=0
            while(x<i):
                sys.stdout.write('*')
                x = x+1
            print('')
            i=i+1

printstars(5)

바이트를 16진수 표시로 인쇄하려고 하면 다음과 같은 차이가 있습니다.예를 들어, 10진수 값은2550xFF16진수 표시:

val = '{:02x}'.format(255)

sys.stdout.write(val) # Prints ff2
print(val)            # Prints ff

언급URL : https://stackoverflow.com/questions/3263672/the-difference-between-sys-stdout-write-and-print

반응형