2016-08-12 22 views
0

subprocessを使用してスクリプトfile1.pyからutil.pyを実行しようとしています。両方とも同じディレクトリにあります。現在のディレクトリから実行するとうまくいきますが、別のディレクトリからfile1.pyを実行すると失敗します。サブプロセスによるPythonスクリプトの実行に失敗しました

file1.py:

#!/usr/bin/env python 
import subprocess 
out=subprocess.Popen(["./util.py"],shell=True) 
print "done" 

util.py:

#!/usr/bin/env python 
def display(): 
    print "displaying" 
display() 

エラー:

/bin/sh: ./util.py: No such file or directory 
    done 
+1

使用完全なルートの代わりに、 '「./util.pyを」' – Raskayu

答えて

0

ターミナルで./util.pyを実行するには、意味「の現在の作業ディレクトリに見てutil.pyという名前のファイルを実行してを実行してください。作業ディレクトリは、コマンドを実行するディレクトリです。つまり、pythonスクリプトは別のディレクトリから実行するとutil.pyを見ることができません。

あなたはfile1.pyとutil.pyが常に同じディレクトリにあることが確実な場合、あなたはfile1.pyのディレクトリを前に付けし__file__os.path.dirnameを使用することができます。

file1.py:

#!/usr/bin/env python 
import os 
import subprocess 

current_dir = os.path.dirname(__file__) 
filename = os.path.join(current_dir, "util.py") 
out = subprocess.Popen([filename], shell=True) 
print("done") 
0

あなたはexecfile()の代わりsubprocess.Popen()使用することができます。

file1.py:

execfile("util.py") 
print "done" 

またはあなたがそれらの両方を処理したい場合は、Pythonの標準ライブラリにすでにあるthreadingモジュールを使用することができます

from threading import Thread 

Thread(target=lambda:execfile("util.py")).start() 
print "done" 
関連する問題