2016-07-28 37 views
0

で私のプログラムでは、私は、コマンドを呼び出す:サブプロセスのエラーメッセージ:[errnoを2] _execute_childレイズchild_exception

command_two = 'sfit4Layer0.py -bv5 -fs' 
subprocess.call(command_two.split(), shell=False) 

私はPyCharmを使用していますが、私はエラーメッセージを取得:歩くとき

Traceback (most recent call last): 
    File "part2test.py", line 5, in <module> 
    subprocess.call(command_two.split(), shell=False) #writes the summary file 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call 
    return Popen(*popenargs, **kwargs).wait() 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__ 
    errread, errwrite) 
    File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child 
    raise child_exception 
OSError: [Errno 2] No such file or directory 

を私のプログラムを通して、それは私がsfit4Layer0.pyにしたいプログラムには決して行きません、それはサブプロセスで立ち往生していますが、私はなぜそれがわかりません。シェルを変更するとTrueが役に立ちません - これらのエラーメッセージは表示されませんが、コードが正しく実行されません。どんな提案も役に立ちます。

私のbashのプロフィール:

PATH="~/bin:/usr/bin:${PATH}" 

export PATH PYTHONPATH="/Users/nataliekille/Documents/sfit4/pbin/Layer0:/Users/nataliekille/Documents/sfit4/pbin/Layer1:/Users/nataliekille/Documents/sfit4/pbin/ModLib:/Users/nataliekille/Documents/sfit4/SpectralDB" 

export PYTHONPATH 

PATH=${PATH}:${PYTHONPATH} 

export PATH 
+0

スクリプトは '$ PATH'にあるディレクトリにありますか? – cdarke

+0

どのスクリプトが正確に話していますか?私は今、自分のbashプロフィールを編集しようとしています。ディレクトリを$ PATHに書き込むことをどのように示唆しますか? – alli

+0

あなたの '.bash_profile' do:' PATH =/home/user/Layer0:$ PATH'の中に '/ home/user/Layer0'にあるスクリプトがあるとしましょう({}は必要ありません。どんな害もしないでください)。注意:私は完全な階層名を使用しています。次に、コマンドラインでファイル "'。./bash_profile'を "ソース"し、pythonプログラムまたはPyCharmを実行します。 – cdarke

答えて

0

あなたはan important part of the subprocess documentationを見逃しています。 "1つの文字列[文字列のリストではなく、コマンドで]のいずれかのシェルがTrue(以下を参照)でなければなりません。そうでなければ、文字列は単に引数を指定せずに実行するプログラムに名前を付けるだけです。

したがって、実行可能ファイルが'sfit4Layer0.py -bv5 -fs'でないため、カーネルがコンパイルされています。文字列を(たとえば)'sfit4Layer0.py -bv5 -fs'.split()、または['sfit4Layer0.py', '-bv5', '-fs']に置き換えると機能するはずです。

+0

私はそれを呼び出すとsplitを使います。これはリストにする必要がありますか? – alli

+0

はい、それはすべきです - 申し訳ありませんが、私はそれを逃しました(あなたdid not edそれは正しいのですか?)。はい、それがリストになります。 a)あなたのシステム '$ PATH'に' sfit4Layer0.py'が存在することを確認しましたか? b)その実行可能ビットは正しく設定されていますか? c) '#!/ usr/bin/env python'のような" shebang "行を持っているので、カーネルはそれをどのプログラムで処理するのか知っていますか? – holdenweb

+0

bashprofileを一緒に追加しました。プログラムはLayer0ディレクトリにありますので、十分ではありませんか? – alli

関連する問題