2016-10-29 18 views
0

私はサブプロセスとtkinterを使ってコマンドプロンプトで実行できるGUIを作っています。subprocess - shell = Falseの場合FileNotFoundError

def test_subprocess(self): 
     proc = subprocess.Popen(["echo", "Hello"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True, shell=False) 
     response = proc.communicate()[0] 
     self.log.insert("end", response) 

私はshell=Falseを設定した場合、私はこのエラーを取得する:

FileNotFoundError: [WinError 2] The system cannot find the file specified 

は、私はすでに列に分かれ引数を持っています。

答えて

3

これは、echoがWindowsの組み込みコマンドであり、実行可能ファイルではないためです。 があると、shell=Trueは有効になります。

(または、お使いのOSに応じて、bash -cまたはcmd /cとしてシェルの接頭辞を追加)Windows上のあなたのための

例:作品:

proc = subprocess.Popen(["cmd", "/c", "echo", "Hello"], stdin=subprocess.PIPE, stdout=subprocess.PIPE, universal_newlines=True, shell=False) 

しかし、私はこれが唯一の運動だとし、 Popenからechoを実行すると、printための過剰ですので、:)

注:Linux/UNIXで、それはあまりにも内蔵されているが、cdarkeが述べたように、中にフォールバックの実行ファイルがあります一部のバージョンでは/binなので、うまくいくでしょう。

+1

追加するだけで、多くのUNIXシステムには '/ bin/echo'とシェルの組み込み機能があるので、おそらくこの特定の問題はWindowsでしか得られません。 – cdarke

+1

@cdarke:nice。ユーザーは明らかにウィンドウを使用していますが、エラーメッセージは最も悪いと認識されます。ファイルが見つからないファイルはありません。 –

+0

ファイル名が報告されていないときに嫌いですか?それはよく見つからないファイルを知っていますが、私たちに伝えるのは面倒です。見つけ出すために 'strace'を実行することさえできません。 – cdarke

関連する問題