2012-05-03 14 views
1

私はUbuntuで実行可能ファイルを呼び出す必要があります... Windowsでsubprocess.Popenを使用してこの作業を行う方法を学びました。今、私はUbuntuでこの手順を繰り返す必要があります。私は、次のPythonコマンドを使用しているサブプロセスを呼び出す

:私はshell=1を変更した場合

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

リターンは

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 

あり、そこには不満はありませんが、何も出力ファイルはどちらか生成されません。私はfile filename.exe を使用して、このファイルの種類をチェックして

それは返さ:

はfilename.exe:ELF 64ビットLSBの実行、x86-64で、バージョン1(SYSV)、 動的にリンクされた(使用法を共有ライブラリは、GNU/Linuxの2.6.9のために、

だから、Ubuntuのでsubprocess.Popenを使用して、それを呼び出すことが可能である

を取り除かない )?

+1

32ビットホスト上で64ビットバイナリを実行しようとしていますか? 'uname -a'の出力を表示できますか? –

+0

私のUbuntuは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

すぐにPythonのドキュメントを読むと、正しいことをしているように見えます。あなたのシステム上で動作している既知のexeであるはずの/ bin/falseをexecにしようとするとどうでしょうか?それが動作する場合、あなたのexeは間違っている可能性があります(おそらく32ビットシステムで64ビット)

+0

これは/ bin/falseを入力することで文句を言わなかったので、私のexeが間違っているようです。さらに、shell = 0とshell = 1の違いは何ですか?ありがとう –

+0

シェル= 1の場合、ファイルを実行していないので、評価するシェルに文字列を渡します(.e.g "ls -la〜/") – imichaelmiers