2012-04-25 2 views
0

큰 응용 프로그램의 일부로 subprocess.call()을 사용하여 파이썬으로 "화면"을 만들려고합니다.gnu-screen 및 call()이 예기치 않은 결과를 보임

-d -m 인수를 사용하여 화면을 생성하면 배경으로 만들어야하며 전환하지 않아야합니다. 명령 줄에서 screen -d -m -S test을 실행하면 예상대로 작동합니다.

cmd=["screen", "-d", "-m", "-S", "test"] 
call(cmd,shell=True) 

가 생성 화면으로 이동 :

그러나 나는 다음 파이썬 코드를하려고하면.

호출이 이러한 인수를 전달하거나 명령을 실행하는 방법에 약간의 차이가 있습니까?

+4

당신이'쉘을 사용하려고하는 경우 = TRUE '는 등의 인수를 전달합니다

#!/usr/bin/env python from subprocess import * cmd=['screen', '-d', '-m', '-S', 'test'] call(cmd) 

호출이 제대로 백그라운드로 스크린 프로세스를 시작합니다 다음 스크립트입니다

'' '', '-d', '-m', '-S', 'test']') 대신에 문자열 (''screen -d -m -S test '') 그것은 단지 문자열에 조인되어 쉘에게 전달됩니다. 왜냐하면 인수가'execv()'syscall에 전달되는 방법을 제어 할 수있는 척하지 않는 것이 좋을 때, passi ng'shell = True', 실제로 그 제어권을 제공하고 있습니다. –

+2

@Charles Duffy : 답을해야합니다. – zigg

+0

@CharlesDuffy shell = True가 없기 때문에 아무 것도하지 않는 것 때문에 그 줄을 추가하려고했습니다. 쉘 = True로 문자열을 전달하는 것 같습니다. – varesa

답변

0

합니다 (shell=True없이) 나를 위해이

cmd=["screen", "-d", "-m", "-S", "test", "bash"] 
call(cmd) 
0

작품을보십시오.

$ screen -ls 
No Sockets found in /var/run/screen/S-cduffy. 

$ ./screen-startup-test 
$ screen -ls 
There is a screen on: 
     12161.test  (04/25/2012 03:47:32 PM)  (Detached) 
1 Socket in /var/run/screen/S-cduffy. 
+1

이상한 ... 나를 위해'screen -list'는 아무 것도 보여주지 않았습니다. – varesa

+1

실제로 작동하는 것 같습니다. 내 코드에 오타가 있었음에 틀림 없습니다 ... – varesa

관련 문제