큰 응용 프로그램의 일부로 subprocess.call()
을 사용하여 파이썬으로 "화면"을 만들려고합니다.gnu-screen 및 call()이 예기치 않은 결과를 보임
-d -m
인수를 사용하여 화면을 생성하면 배경으로 만들어야하며 전환하지 않아야합니다. 명령 줄에서 screen -d -m -S test
을 실행하면 예상대로 작동합니다.
cmd=["screen", "-d", "-m", "-S", "test"]
call(cmd,shell=True)
가 생성 화면으로 이동 :
그러나 나는 다음 파이썬 코드를하려고하면.
호출이 이러한 인수를 전달하거나 명령을 실행하는 방법에 약간의 차이가 있습니까?
당신이'쉘을 사용하려고하는 경우 = TRUE '는 등의 인수를 전달합니다
호출이 제대로 백그라운드로 스크린 프로세스를 시작합니다 다음 스크립트입니다
'' '', '-d', '-m', '-S', 'test']') 대신에 문자열 (''screen -d -m -S test '') 그것은 단지 문자열에 조인되어 쉘에게 전달됩니다. 왜냐하면 인수가'execv()'syscall에 전달되는 방법을 제어 할 수있는 척하지 않는 것이 좋을 때, passi ng'shell = True', 실제로 그 제어권을 제공하고 있습니다. –
@Charles Duffy : 답을해야합니다. – zigg
@CharlesDuffy shell = True가 없기 때문에 아무 것도하지 않는 것 때문에 그 줄을 추가하려고했습니다. 쉘 = True로 문자열을 전달하는 것 같습니다. – varesa