배포에 관계없이 Python에서 터미널을 엽니다.

배포에 관계없이 Python에서 터미널을 엽니다.

저는 Django새 터미널을 열고 docker exec.

이것이 내가 구현한 방법입니다.

current_os = platform.system()
exec_command = f"docker exec -it {container_id} /bin/{shell}"
if current_os == "Windows":
    command = f"start powershell /c {exec_command}"
elif current_os == "Darwin":
    command = f"osascript -e 'tell app \"Terminal\" to do script \"{exec_command}\"'"
elif current_os == "Linux":
    command = f"gnome-terminal -- sh -c \"{exec_command}\""  # TODO tests
else:
    raise Exception("An unknown OS was detected. Unable to open a terminal.")

if os.system(command) != 0:
    raise Exception("There was an error opening a new terminal.")

내 질문은: gnome-terminal실제로 대부분의 배포판에서 작동합니까? 그렇지 않다면 어떻게 처리해야 합니까? 얼마나 오류 방지 기능이 있나요? 인터넷을 검색해도 실제 해결책이 나오지 않았습니다.
터미널을 열 때 자동으로 명령을 실행하고 싶은데, 명령을 실행한 후 터미널이 닫히지 않도록 하는 속성이 필요하다는 점을 명심하세요.

Ubuntu 20.04에서만 Linux 사례를 테스트할 수 있습니다.

답변1

사람들이 이미 지적했듯이 "Linux" 같은 것은 없습니다. "Debian", "Fedora", "Arch", "Gentoo" 등이 있으며 그 변형도 있습니다. 이 모든 기능을 사용할 수 있다고 확신할 수는 /bin/sh있지만할 수 없다특정 터미널 애플리케이션이 설치된다고 가정합니다.

일반적인 터미널 응용 프로그램 목록을 만든 다음 작동하는 응용 프로그램을 찾을 때까지 반복할 수 있습니다. 예를 들면 다음과 같습니다.

import random
import subprocess

class NoTerminalError(Exception):
    pass

possible_terminals = [
        ('lxterminal', lambda cmd: ['lxterminal', '-e', '/bin/sh', '-c', cmd]),
        ('xfce4-terminal', lambda cmd: ['xfce4-terminal', '-x', '/bin/sh', '-c', cmd]),
        ('xterm', lambda cmd: ['xterm', '-e', '/bin/sh', '-c', cmd]),
        ('gnome-terminal', lambda cmd: ['gnome-terminal', '--', "/bin/sh", "-c", cmd]),
        ]

def find_terminal():
    random.shuffle(possible_terminals)
    for name, cmdline in possible_terminals:
        try:
            subprocess.run(cmdline("/bin/true"), check=True)
            return name, cmdline
        except subprocess.CalledProcessError:
            pass

    raise NoTerminalError()


name, cmdline = find_terminal()
print('using terminal', name)
subprocess.run(cmdline('cmatrix'), check=True)

또는 문서에 "이 프로그램에는 다음이 필요합니다.여기에 이름을 입력하세요".

관련 정보