2012-05-03 2 views
1

우분투에서 실행 파일을 호출해야합니다 ... Windows에서 subprocess.Popen을 사용하여이 작업을 수행하는 방법을 배웠습니다. 자, 우분투에서이 단계를 반복해야합니다.서브 프로세스 호출

나는 다음과 같은 파이썬 명령을 사용하고 있습니다 :

a=subprocess.Popen("filename.exe",shell=0) 

반환 내가 불만이 없습니다 shell=1을 변경하는 경우

Traceback (most recent call last): 
    File "/untitled0.py", line 29, in <module> 
    a=subprocess.Popen("filename.exe",shell=0) 
    File "/usr/lib/python2.7/subprocess.py", line 679, in __init__ 
    errread, errwrite) 
    File "/usr/lib/python2.7/subprocess.py", line 1249, in _execute_child 
    raise child_exception 
OSError: [Errno 8] Exec format error 

입니다,하지만 출력 파일이 하나 생성되지 않습니다.

: 파일 이름 : ELF 64 비트 LSB 실행, - 64, 버전 1 (SYSV), 동적 링크 (사용

나는 file filename.exe 를 그것은 반환하여이 파일의 종류를 확인했다 공유 libs와, GNU/리눅스 2.6.9를 들어,

그래서 우분투에서 subprocess.Popen를 사용하여 호출 할 수 있습니다

을 제거하지 )?

+1

32 비트 호스트에서 64 비트 바이너리를 실행하려고합니까? 'uname -a'의 결과를 보여줄 수 있습니까? –

+0

내 우분투가 32 비트 인 것 같아서 문제가 될 수 있습니다 .. 무엇이 uname -a인지 알 수 있습니까? –

+0

OS에 대한 정보, 호스트 이름, 커널 버전, 커널의 컴파일 시간 및 아키텍처 (a가 있는지 여부를 알 수있는)를 포함하여 호스트에 대한 정보를 인쇄하는 명령입니다. 제 32 비트 랩톱에서는 64 비트 서버에서'Linux red 2.6 '을 인쇄하는 동안'Linux radiance 2.6.26-2-686 # 1 SMP Thu Jan 27 00:28:05 UTC 2011 i686 GNU/Linux'를 인쇄합니다. 32-5-amd64 # 1 SMP Mon Jan 16 16:22:28 UTC 2012 x86_64 GNU/Linux'. –

답변

3

신속하게 파이썬 워드 프로세서를 읽는 것은 옳은 일을하는 것처럼 보입니다. 어때요 exec에 노력하고/bin/false는 시스템에 알려진 작업 exe해야합니다. 그게 작동한다면, 당신의 exe는 아마도 틀릴 것입니다 (아마도 32 비트 시스템에서 64 비트)

+0

그것은/bin/false를 먹이로 불평하지 않았으므로 내 exe가 잘못되었다고 생각됩니다. 또한 셸 = 0과 셸 = 1의 차이점은 무엇입니까? 감사합니다 –

+0

쉘 = 1 인 경우 파일을 실행하지 않고 평가할 쉘에 문자열을 전달합니다 (예 : .e.g "ls -la ~ /"). – imichaelmiers

관련 문제