Popen 명령에 꽤 긴 bash 명령을 전달하려고합니다. 명령은 다음과 같습니다.
'/usr/local/bin/drush --alias-path=/data/scripts/drush_aliases @test pml -y | /bin/grep -i dblog | /bin/grep -i enabled'
한 번에 전체 명령을 전달할 때 Popen 명령은 Cron에서 올바른 출력을 반환하지 않습니다. 이 문제를 해결하기 위해 문제를 해결하기 위해 전달하면서 목록 ( "명령"에서 볼 수 있음)으로 분리하려고합니다.
전체 코드에서 여러 다른 Popen
개체를 연결하고 있습니다. 그러나 내 버그는 다음과 같은 경우에만 재현 할 수 있습니다.
command = ['/usr/local/bin/drush', '--alias-path=/data/scripts/drush_aliases', '@test', 'pml', '-y']
try:
process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
output = process.communicate()
이 중단 원인은 무엇입니까?
프로세스가 중단되는 가장 일반적인 이유 중 하나는 stdin에서 입력을 읽으려는 경우입니다.
/dev/null
stdin 에 닫힌 파이프 (또는 핸들 )를 명시 적으로 전달하여이 문제를 해결할 수 있습니다 .
process = subprocess.Popen(command,
stdout=subprocess.PIPE,
stderr=subprocess.PIPE,
stdin=subprocess.PIPE) ## this is new
communicate()
인수로 전달 된 내용을 작성한 후 stdin에 전달 된 파이프를 닫아 프로세스가 중단되는 것을 방지합니다.
Python 3.2 이상에서는 stdin=subprocess.DEVNULL
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다