1
위의 Popen 전화에서 stdout=PIPE
을 제거하면 모든 목록을 출력 한 후 ls -l
출력이 나옵니다. stdout=PIPE
를 사용하는 경우, 나는이 \n
는 PIPE
정확히 subprocess.Popen
의 경우에 작동 않는 방법subprocess.Popen에서 stdout = PIPE를 사용해야하는 이유는 무엇입니까?
b'total 67092\n-rw-r--r-- 1 root root 171 May 27 09:08 new.py\n-rw-r--r-- 1
root root 74 May 12 18:14 abcd.conf\n-rwxr-xr-x 1 root root 5948 May 13 13:21 abxyz.sh\ndrwxr-xr-x 2 root root 4096 May 13
12:39 log\ndrwxrwxrwx 3 root root 4096 May 14 16:02
newpy\n-rw-r--r-- 1 root root 134 May 27 10:13
pipe.py\n-rw-r--r-- 1 root root 155 May 27 10:07
proc.py\ndrwxrwxrwx 3 root root 4096 May 14 14:29 py\ndrwxr-xr-x
16 1000 1000\n' b''
아래로, 오히려 개행보다, 표시 얻을? 왜 우리는 그것을 필요로합니까? 나는 그것을 사용하지 않고도 적절한 출력을 얻었습니까? stderr와 stdout을 모두 사용하고 있습니까?
오을. 나는 그것을 인쇄하지 않고 보았다. 그것은 내 화면에 직접 표시됩니다. 나는 그것을 인쇄하고 있다고 생각했다. PIPE가없는'stdin'의 경우 어떻게 사용합니까? –
'stdout = PIPE'을 사용한 후에도 화면에 stderr를 표시하지 않습니다. 왜? stdout을 파이프하고 stderr 만 표시하면 안됩니다. –
'ls'은'stdout' 파일 핸들에 글을 씁니다.이 파일 핸들은 파이프가 터미널에 직접 연결되어 있지 않을 때 쓰게됩니다. 파이프를 파이썬으로 파이프하면'ls'이 쓰는 모든 것을 캡처 할 수 있습니다. 'ls'는'stderr'에 아무것도 쓰지 않습니다. 'stderr'에'PIPE'을 사용하면'err' 변수가 비어있는 것을 볼 수 있습니다 ('b'''는 빈 바이트 값입니다). –