2014-03-26 5 views
4

실행중인 하위 프로세스는 같은 프로그램은 파이썬 2.7.2과 다른 시스템에서 작동합니다 제대로중괄호는 popen

# Python 2.7.4 

import subprocess 
subprocess.Popen('ls src/*.cpp',shell=True): 
src/tonemap.cpp src/pch.cpp 

subprocess.Popen('ls src/{t,p}*.cpp', shell=True) 
ls: cannot access src/{p,t}*.cpp: No such file or directory 

중괄호를 처리하지 않습니다. 두 시스템 모두 bash 쉘을 사용합니다.

이유가 있으며 어떻게 해결할 수 있습니까?

편집 : 명령 줄에서 직접 명령을 호출은

올바른 결과를 반환

귀하의 경우
ls src/{t,p}*.cpp 
src/tonamep.cpp src/pch.cpp 
+0

그리고 Linux Mint에서 2.7.4에서 2.7.2로 롤백 할 수 있습니까? – memecs

+0

두 번째 예제는 나를 위해 작동합니다 ... 두 시스템에있는 셸은 무엇입니까? –

+0

@TomFenech 둘 다 bash 셸인 – memecs

답변

6

shell=True이 구문을 지원하지 않는 /bin/sh이 실행됩니다. bash을 명시 적으로 지정하십시오.

from subprocess import check_call 

check_call('ls src/{t,p}*.cpp', shell=True, executable='/bin/bash') 
+0

일부 시스템에서'/ bin/sh'는'bash'를 실행합니까? –

+0

네, 효과가 있습니다! – memecs

+1

@TomFenech : 내 시스템에서 '대쉬'를 실행합니다. '/ bin/sh'는 대개 "posix"ly입니다. 그것이 bash를 실행하더라도; 아마 posix 모드에서 실행됩니다. 나는 posix 쉘이 중괄호 확장을 지원해야하는지 여부를 모른다. – jfs

1

이는 popen 올바르게, 오류가 ls에서보고 실행. 당신이 명령을 실행 할 때이 같은 오류를 제공해야합니다 : 터미널에서

ls src/{t,p}*.cpp 

합니다.

+0

맞습니다. 그러나 쉘이 호출하는 명령은 'ls src/{t, p} *. cpp' – memecs

+0

이 아니며 올바른 명령을 실행했습니다. 왜 네가 명령을 내리지 않았다는 말을하는거야? – user3

+0

출력이 'tonemap.cpp pch.cpp'가 아니기 때문에 – memecs

0

다른 컴퓨터는 해당 구문을 처리하지 않는 다른 셸을 사용합니다.

+0

둘 다 bash입니다 – memecs