몇 가지 배경 정보: 저는 초보 사용자를 위한 소규모 Python 프로그래밍 랩을 만들고 있습니다. 나는 그들이 Python의 IDLE 편집기(로 실행 python -m idlelib
)를 사용하기를 원하지만 터미널 사용에 익숙하지 않을 수 있으므로 IDLE을 실행하는 nautilus(Gnome의 파일 관리자)에서 무언가를 클릭하기를 바랍니다. 보다 정확하게는 Python 가상 환경을 사용하여 IDLE을 시작하고 싶기 때문에 명령은 다음과 같습니다..venv/bin/python -m idlelib
idle
이것은 내가 만들고 이름을 지정하고 실행 파일( )로 표시한 파일입니다 chmod u+x
.
#!/usr/bin/env bash
.venv/bin/python -m idlelib
두 번 클릭하고 "실행"을 선택하면 IDLE이 표시되고 모든 것이 정상입니다. 그러나 두 번 클릭하면 몇 개의 버튼이 표시됩니다. 하나는 "실행"이고 다른 하나는 "터미널에서 실행"입니다. 나는 사용자가 어떤 버튼을 클릭하더라도 동일한 경험을 하게 하고 싶습니다.
위의 스크립트를 사용하여 "터미널에서 실행"을 선택하면 IDLE과 터미널이 모두 팝업됩니다. 이는 특히 터미널을 닫으면 IDLE이 종료되므로 사용자에게 혼란을 줄 수 있습니다. 명령 뒤에 추가하면 &
터미널이 닫히지만 "상위"(터미널)가 종료되었기 때문에 IDLE도 닫힙니다.
nohup
그래서 이게 setsid
꼭 필요한 것 같다고 들었는데 뭔가 이상한 일이 일어났습니다. 내가 원하는 것을 (다소간) 수행하는 스크립트는 다음과 같습니다.
#!/usr/bin/env bash
setsid .venv/bin/python -m idlelib &
sleep 1
이 스크립트를 클릭하고 "터미널에서 실행"을 선택하면 터미널이 나타나고 IDLE이 나타난 다음 터미널은 사라지지만 IDLE은 유지됩니다.
그러나 마지막 사항에 유의하십시오 sleep 1
. 제거하면 터미널은 몇 초 동안만 나타나고 IDLE은 절대 나타나지 않습니다. setsid
이것은 둘 다에 발생합니다 nohup
.
내 질문은 다음과 같습니다이것이 왜 sleep 1
필요한가요?
내 생각에 IDLE은 시작하는 데 시간이 좀 걸리고 터미널이 완전히 시작될 때까지 "생존"되지 않습니다. 그런데 이상하네요. 제가 시작하고 싶은 프로그램 setsid
은즉시이를 시작한 프로세스와 독립적입니다.
답변1
사용해 보세요-w옵션이므로 완료될 때까지 기다린 다음 종료 코드를 반환합니다.
#!/usr/bin/env bash
setsid -w .venv/bin/python -m idlelib